![](/img/trans.png)
[英]Dynamic database table creation in ASP.Net Core 2 with Entity Framework
[英]Force inherited classes in ASP.NET Core Entity Framework Core to dedicated MySQL table
有一個模型Thread
應該計算另一個稱為Post
模型的所有屬性,我使用繼承:
class Post {
public int Id{get;set;}
public string Title{get;set;}
// ...
}
class Thread: Post {
public int ForumId{get;set;}
// ...
}
EF Core將它們放在一個表中,並添加了Discriminator
列。 它包含類的名稱,以便.NET Core可以將其序列化為正確的類型。
我的目標是:
Post
模型中所有屬性的Table Post
Thread
和Post
所有屬性的表Thread
Thread
行,這些行在Post
行中始終為空 DbContext
為Post
和Thread
創建兩個不同的DbSet<T>
OnModelCreating
為每個實體添加builder.Entity<Post>().ToTable("Post")
[Table("Post")]
裝飾器 Post
和Thread
從其繼承 最后一個作品:
class Content {
// Shared Attributes like Title
}
class Post: Content {}
class Thread: Content {}
但這會在鏈接實體時引起問題。
您所描述的稱為TPC(即每表具體類型)關系模式,目前在Entity Framework Core中不受支持。 您可以在此處關注相關問題 。
目前尚無此功能的里程碑,因此,如果您絕對必須執行TPC,則唯一的選擇是使用EF6或其他支持此關系策略的替代ORM,而不是EF Core。
就個人而言,我建議您堅持使用EF Core,而僅使用TPH(按表分層)或TPT(按表分層)關系策略。 前者實際上是默認值,並且將為這兩者生成一個表,其中Discriminator
列指示實際類型。 后者是使用ToTable
fluent config或[Table]
屬性時得到的結果,並為包含所有共享屬性的基本類型創建一個表,然后為每個派生類型創建一個表,僅包含該屬性的屬性類型,並使用外鍵返回基本類型的表。 在帖子和線程之間有很強的關系,在數據庫級別實際維護這種關系很有價值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.