首页 文章

唯一索引属性上的实体框架FK

提问于
浏览
0

我想在第二个表中的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中出现错误:

{“在模型生成期间检测到一个或多个验证错误:\ r \ n \ r \ nT_Measurements_T_AlarmTresholds_Source_T_Measurements_T_AlarmTresholds_Target ::参照约束的从属角色中的所有属性的类型必须与主体角色中的相应属性类型相同 . 实体'T_AlarmTresholds'上的属性'MeasurementGuid'与参照约束'T_Measurements_T_AlarmTresholds'中实体'T_Measurements'上的属性'ID'的类型不匹配 . \ r \ n“}

1 回答

  • 0

    您不需要在虚拟对象上放置外键,而是需要在T_AlarmTresholds中创建新属性:

    public int T_MeasurementsId{get; set;}
    

    充当外键 . 依赖属性(虚拟属性)将自动链接 . 您还需要从虚拟属性中删除ForiegnKey属性 .


    Edit: 刚发现你的代码没有想要将外键属性添加到MeasurementGuid属性 .

相关问题