![](/img/trans.png)
[英]Entity Framework 5 The relationship could not be changed because one or more of the foreign-key properties is non-nullable
[英]Problems creating a Foreign-Key relationship on Entity Framework
我在我的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; }
}
這是報告的細節
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 :: Multiplicity與關系'Dettaglio_TEST_TABLE'中Role'Dettaglio_TEST_TABLE_Target'中的引用約束沖突。 由於“從屬角色”中的所有屬性都是不可為空的,因此“主體角色”的多重性必須為“1”。
我猜,這意味着我在外鍵定義方面失敗了,但我真的不知道在哪里看。 非常感謝任何幫助/提示。
您在Dettaglio
課程中的外鍵屬性之間存在沖突......
public virtual int IDTEST { get; set; }
...具有非可空類型( int
),因此不能是可選的,你的映射......
this.HasOptional(t => t.TEST_TABLE) //...
...你希望這種關系是可選的。
如果您確實需要可選關系,請使用可空的FK屬性:
public virtual int? IDTEST { get; set; }
否則,您必須使用HasRequired
獲取與不可為空的FK屬性的必需關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.