[英]Entity framework create POCO class for join table
我正在嘗試在我的數據datacontext
為datacontext
表(為m2m關系創建的一個)創建POCO實體。
我這樣做的原因是我想自己處理插入表中的鍵。 (不要問我為什么,幾個性能問題。)
所以算法是這樣的:
我使用基於現有表的本地ADO.NET工具生成POCO類,比如說TableAnotherTable
(此表將另外兩個Table
和AnotherTable
聯接AnotherTable
)。 或者只是手動創建它。
我正在嘗試為其添加遷移。 是否使用-IgnoreChanges
。 如果沒有-IgnoreChanges
它將嘗試將現有表TableAnotherTable
重命名為TableAnotherTable1
。 聽起來很公平,但是為什么呢? 它應該僅將現有表映射到新創建的POCO類。
我正在清理Up()
和Down()
方法。
嘗試運行該應用程序並在上下文中執行一些CUD
操作,並不斷出現錯誤:無效的對象名稱dbo.TableAnotherTable1
。
因此,主要問題是: 如何將實體框架創建的聯接表映射到自己的類,以便像常規實體一樣使用它?
更新 :
public class Client
{
public int Id {get;set;}
public ICollection<Group> Groups {get;set;}
}
public class Group
{
public int Id {get;set;}
public ICollection<Client> Clients {get;set;}
}
沒有其他配置或其他內容。
數據庫中GroupClient
表的名稱為GroupClient
我正在使用ADO.NET poco生成工具檢索的poco類是:
[Table("GroupClient")]
public partial class GroupClient
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Group_Id { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Client_Id { get; set; }
}
具有自動鏈接表的初始模型應已生成GroupClient
表,其中有兩列Group_Id
和Client_Id
構成PK。
您應該能夠將其映射到具有顯示的已生成顯式GroupClient
實體的模型,該實體已經定義了屬性和PK,但是您需要更改現有實體導航屬性的類型並指定FK:
public class Client
{
public int Id { get; set; }
[ForeignKey("Client_Id")]
public ICollection<GroupClient> Groups { get; set; }
}
public class Group
{
public int Id { get; set; }
[ForeignKey("Group_Id")]
public ICollection<GroupClient> Clients { get; set; }
}
我個人發現使用Fluent配置更容易遵循:
模型:
public class Client
{
public int Id { get; set; }
public ICollection<GroupClient> Groups { get; set; }
}
public class Group
{
public int Id { get; set; }
public ICollection<GroupClient> Clients { get; set; }
}
public class GroupClient
{
public int Group_Id { get; set; }
public int Client_Id { get; set; }
}
組態:
modelBuilder.Entity<GroupClient>()
.ToTable("GroupClient")
.HasKey(e => new { e.Group_Id, e.Client_Id });
modelBuilder.Entity<Group>()
.HasMany(e => e.Clients)
.WithRequired() // or (e => e.Group) in case you add nav property
.HasForeignKey(e => e.Group_Id);
modelBuilder.Entity<Client>()
.HasMany(e => e.Groups)
.WithRequired() // or (e => e.Client) in case you add nav property
.HasForeignKey(e => e.Client_Id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.