use*_*621 39 .net c# entity-framework foreign-keys ef-code-first
我在我的Entity Framework流畅的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; }
}
Run Code Online (Sandbox Code Playgroud)
这是报告的细节
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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我对两者的流畅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");
}
Run Code Online (Sandbox Code Playgroud)
报告详情:
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);
}
Run Code Online (Sandbox Code Playgroud)
在执行时我总是得到这个错误
System.Data.Entity.Edm.EdmAssociationType:与角色"Dettaglio_TEST_TABLE"引用约束"Dettaglio_TEST_TABLE_Target"在关系多重冲突.因为所有在从属角色属性都是不可为空的,主体作用的多重性必须是"1".
对此,我想,意味着我在没有外键定义的东西,但我真的不知道去哪里看.非常感谢任何帮助/提示.
Sla*_*uma 107
您在课堂上的外键属性之间存在冲突Dettaglio
......
public virtual int IDTEST { get; set; }
Run Code Online (Sandbox Code Playgroud)
...具有非可空类型(int
),因此不能是可选的,你的映射......
this.HasOptional(t => t.TEST_TABLE) //...
Run Code Online (Sandbox Code Playgroud)
...你希望这种关系是可选的.
如果您确实需要可选关系,请使用可空的FK属性:
public virtual int? IDTEST { get; set; }
Run Code Online (Sandbox Code Playgroud)
否则,您必须使用HasRequired
与不可为空的FK属性的必需关系.
归档时间: |
|
查看次数: |
33596 次 |
最近记录: |