0

我有我用的NuGet功能「代碼首先從數據庫」EF 6碼首先生成從數據庫添加Releationship

因爲這似乎是大部分現有的數據庫已經工作得很好。但是,它沒有提供數據庫所有的關鍵關係。

我有一個名爲Sessions的表和一個名爲Responses的表。響應表有一個SessionId字段。現在在舊的EDMX模型文件中,我在Sessions和Responses之間有1:*關係。這樣我可以做foundSession.Responses以獲得該會話的回覆列表。

Code First From Database沒有創建Session.Responses關係。我已經爲會話模型添加了一個ICollection。我懷疑我還需要在'OnModelCreating'方法中添加如何建立這種關係。

我試着這樣做:

modelBuilder.Entity<Session>() 
      .HasMany(e => e.Responses) 
      .WithMany().Map(m => m.ToTable("Sessions").MapLeftKey("Id").MapRightKey("SessionId")); 

但沒有奏效。它給了我一個錯誤:「無效的對象名'dbo.Sessions1'。」

我試圖基礎它關閉在同一方法另一行的:

  modelBuilder.Entity<Role>() 
      .HasMany(e => e.Users) 
      .WithMany(e => e.Roles) 
      .Map(m => m.ToTable("RoleUser").MapLeftKey("Roles_Id").MapRightKey("Users_Id")); 

但是這是一個多對多的關係。我似乎沒有看到任何1:很多。可能嗎?

回答

1

我不是100%確定如何使用流暢API做到這一點,但你可以使用數據註釋這樣來做:

在你Session類:

public virtual ICollection<Response> Responses { get; set; } 

在你Response類:

[ForeignKey("MySession")] 
public int SessionID { get; set; } 

public virtual Session MySession { get; set; } 
+0

我收到此錯誤:類型爲'Outcomes_Report_Engine.Models.DAL.DbResponse'的屬性'SessionId'上的ForeignKeyAttribute無效。在依賴類型「Outcomes_Report_Engine.Models.DAL.DbResponse」上未找到導航屬性「會話」。名稱值應該是有效的導航屬性名稱。 – Scottingham

+0

你把導航屬性嗎? – IronMan84

+0

除了解決方案中的兩大塊代碼之外,還有其他嗎? – Scottingham

0

這是一種方式來創建一個一對多的關係,用流利的API:

modelBuilder.Entity<Response>(). 
    HasRequired(e => e.Session). 
    WithMany(s=>s.Responses). 
    HasForeignKey(m => m.SessionId); 
+0

產品是否應該是'會話'?什麼是.Parent應該是? modelBuilder.Entity ()。 HasRequired(e => e.Responses)。 HasForeignKey(m => m.SessionId); .HasForeignKey不能解析,因爲HasRequired e.Responses是我在會話類中設置的ICollection – Scottingham

+0

對不起,我的錯誤,我編輯了我的答案 – octavioccl

+0

如果我將產品更改爲會話,則無法執行該行在它下面e.Session – Scottingham

相關問題