2017-07-07 13 views
0

我有以下的類(即我不能更新,添加屬性或添加註釋):如何在實體框架6中使用Fluent API來映射沒有外鍵屬性的一對多對象列表?

public class ApprovalRuleset 
{ 
    public Guid Id { get; set; } 
    public List<ApprovalRule> ApprovalRules { get; protected internal set; } 
} 

public class ApprovalRule 
{ 
    public Guid Id { get; set; } 
    public string Value { get; protected internal set; } 
} 

我嘗試寫一些流利的API代碼與實體框架6將它們映射到兩張桌子。

這是ApprovalRule配置:

public class ApprovalRuleEntityConfiguration : EntityTypeConfiguration<ApprovalRule> 
{ 
    public ApprovalRuleEntityConfiguration() 
    { 
     HasKey(x => x.Id); 
     Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
     Property(x => x.Value).IsRequired().HasMaxLength(450); 
    } 
} 

到目前爲止我有:

public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset> 
{ 
    public ApprovalRulesetEntityConfiguration() 
    { 
     HasKey(x => x.Id); 
     Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
     HasMany(x => x.ApprovalRules); 
    } 
} 

上表的外鍵 'ApprovalRules' 的列 'ApprovalRuleset_Id' 不能因爲主鍵 列無法確定而創建。使用AddForeignKey fluent API至 完全指定外鍵。

public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset> 
{ 
    public ApprovalRulesetEntityConfiguration() 
    { 
     HasKey(x => x.Id); 
     Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
     HasRequired(x => x.ApprovalRules) 
      .WithMany() 
      .HasForeignKey(x => x.Id); 
    } 
} 

多重衝突與在關係 「ApprovalRuleset_ApprovalRules的角色 'ApprovalRuleset_ApprovalRules_Target' 的引用約束。由於 從屬角色中的所有屬性都是不可空的,因此主體角色 的多重性必須爲'1'。

我錯過了什麼?我花了很多年尋找堆棧溢出和谷歌。

+0

'的hasMany(X => x.ApprovalRules)'是正確的配置,雖然沒有它的事件按照慣例,你應該得到你想要的。你可以顯示「ApprovalRule」配置嗎? –

+0

原來,如果我有一個空白數據庫,它與HasMany運行正常(x => x.ApprovalRules) – chris31389

回答

0

您需要在ApprovalRule類中添加兩個屬性。然後映射會是這樣 -

public class ApprovalRuleset 
{ 
    public Guid Id { get; set; } 
    public List<ApprovalRule> ApprovalRules { get; protected internal set; } 
} 

public class ApprovalRule 
{ 
    public Guid Id { get; set; } 
    public string Value { get; protected internal set; } 

    public int ApprovalRulesetId { get; set; } 
    public virtual ApprovalRuleset ApprovalRuleset { get; set; } 
} 

public class ApprovalRulesetEntityConfiguration : EntityTypeConfiguration<ApprovalRuleset> 
{ 
    public ApprovalRulesetEntityConfiguration() 
    { 
     HasKey(t => t.Id); 
    } 
} 

public class ApprovalRuleEntityConfiguration : EntityTypeConfiguration<ApprovalRule> 
{ 
    public ApprovalRuleEntityConfiguration() 
    { 
     HasKey(t => t.Id); 

     /*Property(t => t.Value) 
      .HasMaxLength(100);*/ 

     HasRequired(t => t.ApprovalRuleset) 
      .WithMany(t => t.ApprovalRules) 
      .HasForeignKey(d => d.ApprovalRulesetId); 
    } 
} 
+0

我無法更新審批規則或規則集類。你有任何其他想法如何做到這一點? – chris31389

+0

如果在ApprovalRule類中沒有'ApprovalRulesetId'屬性,則無法在實體框架中的兩個類之間建立關係。沒有工作;你甚至不能像這樣手動它們 - '從db.ApprovalRuleset中的s加入r.Id中的db.ApprovalRule中的r等於s.ApprovalRulesetId其中s.Id == 1 select s' – Win

相關問題