首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从现有实体看EF核心的多层次继承

从现有实体看EF核心的多层次继承
EN

Stack Overflow用户
提问于 2021-05-01 06:44:48
回答 1查看 281关注 0票数 2

我有下面的模式结构在EF核心代码第一方法。

代码语言:javascript
运行
复制
public abstract class  BaseModel
{
    [Key]
    public string Id { get; set; }
    public DateTime LastUpdatedDate { get; set; }
}


public class Company  :BaseModel
{
     
    public string Name { get; set; }
    public string Address { get; set; }
}

public class CompanyLog :Company
{
     
    public string LogId { get; set; }
    public DateTime LogDate { get; set; }
}

and DB Context is
public class MyDbContext : DbContext
{
     public DbSet<Company> Company { get; set; }
     public DbSet<CompanyLog> CompanyLog { get; set; }
}

但是在DB迁移之后,CompanyLog表将只使用它自己的属性创建,而不是使用基本表属性创建。我怎么能做到这一点?在db迁移之后,数据库表结构期望为

代码语言:javascript
运行
复制
CREATE TABLE dbo."Company"
(
    Id text  NOT NULL,
    LastUpdatedDate TimeStamp, 
    Name text, 
    Address text, 
)
CREATE TABLE dbo."CompanyLog"
(
    Id text  NOT NULL,
    LastUpdatedDate TimeStamp, 
    Name text, 
    Address text, 
    LogId text   NULL,
    LogDate TimeStamp,  
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-01 07:26:14

CompanyLog表只使用自己的属性创建,而不使用基表属性创建。

因为EF认为CompanyCompanyLog数据库继承的一部分,因此实现了支持的策略之一(目前是表-每个层次结构),从EFCore5.0,TPT (每种表)开始)。

实际上,在post中所显示的方式(即没有额外的数据注释和/或fluent配置),我得到了一个带有弟子列的表,这是TPH的实现。您可能有一些额外的东西给您TPT -两个表,“基”保存基本属性和“派生”只保存附加属性。

您需要的要么是TPC (每类表),要么根本不需要数据库继承。还不支持前者,而后者可以通过以下fluent配置来实现(到目前为止还没有数据注释):

代码语言:javascript
运行
复制
modelBuilder.Entity<CompanyLog>().HasBaseType((Type)null);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67343586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档