我有下面的模式结构在EF核心代码第一方法。
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迁移之后,数据库表结构期望为
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,
)发布于 2021-05-01 07:26:14
CompanyLog表只使用自己的属性创建,而不使用基表属性创建。
因为EF认为Company和CompanyLog是数据库继承的一部分,因此实现了支持的策略之一(目前是表-每个层次结构),从EFCore5.0,TPT (每种表)开始)。
实际上,在post中所显示的方式(即没有额外的数据注释和/或fluent配置),我得到了一个带有弟子列的表,这是TPH的实现。您可能有一些额外的东西给您TPT -两个表,“基”保存基本属性和“派生”只保存附加属性。
您需要的要么是TPC (每类表),要么根本不需要数据库继承。还不支持前者,而后者可以通过以下fluent配置来实现(到目前为止还没有数据注释):
modelBuilder.Entity<CompanyLog>().HasBaseType((Type)null);https://stackoverflow.com/questions/67343586
复制相似问题