簡體   English   中英

使用CodeFirst的C#一對零或一個關系

[英]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.ChildModelIDParentModelID中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM