我想在第二个表中的unique not null属性上添加外键。这是它的样子:
public class T_AlarmTresholds
{
[Key]
public int Id { get; set; }
....
....
public Guid MeasurementGuid { get; set; }
[ForeignKey("MeasurementGuid")]
public virtual T_Measurements Measurement { get; set; }
}
public partial class T_Measurements
{
public int Id { get; set; }
[Index("UC_Guid", IsUnique = true)]
public Guid GUID { get; set; }
}
这是模型构建器:
modelBuilder.Entity<T_Measurements>()
.HasMany(x => x.T_AlarmTresholds)
.WithRequired(x => x.Measurement)
.HasForeignKey(x => x.MeasurementGuid);
实体框架在SQL Server接受此解决方案时抛出错误。调试时Visual Studio中出现错误:
{&#34;在模型中检测到一个或多个验证错误 代:\ r \ n \ r \ nT_Measurements_T_AlarmTresholds_Source_T_Measurements_T_AlarmTresholds_Target: :参照的从属角色中的所有属性的类型 约束必须与相应的属性类型相同 主要角色。物业的类型&#39; MeasurementGuid&#39;在实体上 &#39; T_AlarmTresholds&#39;不符合财产的类型&#39; ID&#39;在实体上 &#39; T_Measurements&#39;在引用约束中 &#39; T_Measurements_T_AlarmTresholds&#39; \ r \ n&#34;}
答案 0 :(得分:0)
您不需要在虚拟对象上放置外键,而是需要在T_AlarmTresholds中创建新属性:
public int T_MeasurementsId{get; set;}
充当外键。依赖属性(虚拟属性)将自动链接。您还需要从虚拟属性中删除ForiegnKey属性。
<小时/> 修改: 刚发现您的代码不使用Id列作为主键,而是使用Guid,因此您需要将外键属性添加到MeasurementGuid属性。