在实体框架上创建外键关系的问题
本文关键字:关系 问题 创建 实体 框架 | 更新日期: 2023-09-27 18:20:36
我在实体框架fluent Api:中配置外键关系时遇到问题
这是报告的负责人:
public class Testata
{
public Testata() { Details = new List<Dettaglio>(); }
public virtual int IDTEST { get; set; }
public virtual string Value { get; set; }
public virtual int IDDETAIL { get; set; }
public virtual string IDTESTALT { get; set; }
public virtual byte[] BLOB { get; set; }
public virtual IList<Dettaglio> Details { get; set; }
}
这是报告的详细
public class Dettaglio
{
public virtual int IDDETAIL { get; set; }
public virtual int IDTEST { get; set; }
public virtual string DSDETAIL { get; set; }
public virtual Testata TEST_TABLE { get; set; }
}
这是我对两者的API定义。报告负责人:
public TEST_TABLEMap()
{
// Primary Key
this.HasKey(t => t.IDTEST)
.Property(t => t.IDTEST)
.IsRequired()
.HasColumnType("Int")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("IDTEST");
// Table & Column Mappings
this.ToTable("TEST_TABLE");
this.Property(t => t.Value).HasColumnName("DSVALUETEST");
this.Property(t => t.IDTESTALT).HasColumnName("IDTESTALT");
this.Property(t => t.BLOB).HasColumnName("BLOB");
}
报告详细信息:
public TEST_DETAILMap()
{
// Primary Key
this.HasKey(t => t.DSDETAIL);
// Properties
this.Property(t => t.DSDETAIL);
// Table & Column Mappings
this.ToTable("TEST_DETAIL");
this.Property(t => t.IDDETAIL).HasColumnName("IDDETAIL");
// this.Property(t => t.IDTEST).HasColumnName("IDTEST");
this.Property(t => t.DSDETAIL).HasColumnName("DSDETAIL");
// Relationships
this.HasOptional(t => t.TEST_TABLE)
.WithMany(t => t.Details)
.HasForeignKey(d => d.IDDETAIL).WillCascadeOnDelete(true);
}
在执行时,我总是得到这个错误
System.Data.Entity.Edm.EdmAssociationType::多重性与关系"Dettaglio_TEST_TABLE"中角色"Dettagrio_TEST_TABLE_Target"中的引用约束冲突。由于Dependent Role中的所有属性都不可为null,因此Principal Role的多重性必须为"1"。
我想,这意味着我在外键定义方面有些失败,但我真的不知道该从哪里看。非常感谢您的帮助/提示。
类Dettaglio
中的外键属性之间存在冲突。。。
public virtual int IDTEST { get; set; }
它具有不可为null的类型(int
),因此不能是可选的,并且您的映射。。。
this.HasOptional(t => t.TEST_TABLE) //...
您希望关系是可选的。
如果您确实想要一个可选关系,请使用可为null的FK属性:
public virtual int? IDTEST { get; set; }
否则,对于具有不可为null的FK属性的必需关系,必须使用HasRequired
。