[英]C# One-To-Zero-Or-One relationship using CodeFirst
所以我有以下代碼:
ParentModel.cs
public class ParentModel {
public int ParentModelID {get; set;}
...other fields here
public ChildModel ChildModel {get; set;}
}
ChildModel.cs
public class ChildModel{
[ForeignKey("ParentModel")]
public int ChildModelID {get; set;}
...other fields and navigation properties here
public int ParentModelID {get; set;}
public ParentModel ParentModel {get; set;}
}
這樣就可以成功生成數據庫。 當我嘗試保存數據時會出現問題。 例如,我ParentModel
數據保存到ParentModel
,然后成功保存。 但是,當我保存在ChildModel
,即使我的數據包含ParentModel
的ID,它ParentModel
給我以下錯誤:
INSERT語句與FOREIGN KEY約束“ FK_dbo.ChildModels_dbo.ParentModels_ChildModelID”沖突。 數據庫“ MyDatabaseName”的表“ dbo.ParentModels”的列“ ParentModelID”中發生了沖突。 該語句已終止。
使用以下流利的api
public class ParentModel {
public int ParentModelID {get; set;}
...other fields here
public virtual ChildModel childModel {get; set;}
}
public class ChildModel{
public int ParentModelID {get; set;}
public int ChildModelID {get; set;}
...other fields and navigation properties here
public virtual ParentModel parentModel {get; set;}
}
然后我將使用流利的api建立關系
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Configure ParentModelID as PK for ChildModel
modelBuilder.Entity<ChildModel>()
.HasKey(e => e.ParentModelID);
// Configure ParentModelID as FK for ChildModel
modelBuilder.Entity<ParentModel>()
.HasOptional(s => s.childModel)
.WithRequired(ad => ad.ParentModelID);
}
你差點就吃了; 您需要一個已設置的共享主鍵。 問題是您大概在設置帶有父級ID的ChildModel.ParentModelID
屬性。 刪除屬性和設置ChildModel.ChildModelID
到ParentModelID
中的Parent
實體- ChildModelID
是FK到ParentModel
實體。 您還需要使ChildModel.ParentModel
必需。
public class ParentModel
{
public int ParentModelID {get; set;}
public ChildModel ChildModel {get; set;}
}
public class ChildModel
{
[ForeignKey("ParentModel")]
public int ChildModelID {get; set;}
[Required]
public ParentModel ParentModel {get; set;}
}
var parent = new ParentModel();
dbContext.Set<ParentModel>().Add( parent );
dbContext.SaveChanges();
var child = new ChildModel()
{
ChildModelID = parent.ParentModelID
};
dbContext.Set<ChildModel>().Add( child );
dbContext.SaveChanges();
參見此答案的另一個示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.