【发布时间】:2017-05-19 06:29:37
【问题描述】:
是否可以在table-per-type 继承场景中使用(很棒的)EntityFramework Reverse POCO Generator 来生成 POCO?
我的数据库包含一个“基本”日志表,以及从它派生的两个表:
create table LogBase
(
Id int identity(1, 1) not null,
LogTime datetime not null default getdate(),
constraint PK_LogBase primary key clustered(Id)
)
create table ErrorLog
(
Id int not null,
ErrorMessage nvarchar(max),
StackTrace nvarchar(max),
constraint PK_ErrorLog primary key(Id),
constraint FK_ErrorLog_LogBase foreign key(Id) references LogBase(Id)
)
create table ChangeLog
(
Id int not null,
PropertyName nvarchar(max),
OldValue nvarchar(max),
NewValue nvarchar(max),
constraint PK_ChangeLog primary key(Id),
constraint FK_ChangeLog_LogBase foreign key(Id) references LogBase(Id)
)
默认情况下,反向 POCO 生成器会生成 3 个 C# 类——LogBase、ErrorLog 和 ChangeLog——每一个都包含一个Id 属性,并且它们之间没有继承关系。
我可以通过将类创建为部分类并将 : LogBase 继承放入部分类中来指定 ErrorLog 和 ChangeLog 从 LogBase 继承 - 这是指定继承的正确方法吗? p>
在模板生成器中,UpdateColumn 回调允许我指定应该在生成的 POCO 中省略其 Id 列的表。
我可以将 UpdateColumn 用于 ErrorLog 和 ChangeLog 表 - 这会导致从每个类中删除“Id”属性,这对于每个类型的表继承是正确的。但是,它也会导致 ErrorLog 和 ChangeLog 类被从生成的 DbContext 中删除,并且 ErrorLog 和 ChangeLog 类中出现以下注释:
// The table 'ChangeLog' is not usable by entity framework because it
// does not have a primary key. It is listed here for completeness.
有没有办法不指定继承关系 导致生成器从模型中省略派生表?
有没有办法阻止生成器包含导航 生成的 POCO 中的属性?
【问题讨论】:
-
使用 UpdateColumn 解决 TPT 中重复 id 问题的重要指针。谢谢。
标签: sql-server entity-framework entity-framework-6 poco