Table-per-type 继承与 Entity Framework 反向 POCO 生成器
Table-per-type inheritance with the Entity Framework Reverse POCO Generator
是否可以使用(很棒的)EntityFramework Reverse POCO Generator to generate POCOs in a table-per-type 继承方案?
我的数据库包含一个 'base' 日志 table,以及两个从中派生的 table:
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# classes - LogBase、ErrorLog 和 ChangeLog - 每个都包含一个 Id
属性,并且没有继承彼此的关系。
我可以指定 ErrorLog 和 ChangeLog 继承自 LogBase,方法是创建 classes 作为部分并将 : LogBase
继承放在部分 classes - 这是指定继承的正确方法吗?
在模板生成器中,UpdateColumn
回调允许我指定 table 应该在生成的 POCO 中省略它们的 Id
列。
我可以将 UpdateColumn
用于 ErrorLog 和 ChangeLog tables - 这导致 'Id' 属性 从每个 class 中删除,这对于 table-per-type 继承是正确的。但是,这也导致ErrorLog和ChangeLog classes被从生成的DbContext中移除,ErrorLog和ChangeLogclasses中出现如下注释:
// The table 'ChangeLog' is not usable by entity framework because it
// does not have a primary key. It is listed here for completeness.
有没有办法不指定继承关系
导致生成器从模型中省略派生的 tables?
有没有办法阻止生成器包含导航
生成的 POCO 中的属性?
看来您可以解决它:
https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/102
v2.27 中的最新版本(2017 年 1 月 5 日)修复了隐藏列和主键的问题 (#167),现在可以正常使用了。
- 从 https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator
下载 v2.27
- 将您的生成器更新到最新版本(截至今天为 2.27)
- 将生成器重新添加到您的项目(以获取最新代码)并在 .tt 文件中重新实现您的更改。
- 保存 tt 文件。
如有任何问题,请在 https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/181
更新 GitHub 案例
是否可以使用(很棒的)EntityFramework Reverse POCO Generator to generate POCOs in a table-per-type 继承方案?
我的数据库包含一个 'base' 日志 table,以及两个从中派生的 table:
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# classes - LogBase、ErrorLog 和 ChangeLog - 每个都包含一个 Id
属性,并且没有继承彼此的关系。
我可以指定 ErrorLog 和 ChangeLog 继承自 LogBase,方法是创建 classes 作为部分并将 : LogBase
继承放在部分 classes - 这是指定继承的正确方法吗?
在模板生成器中,UpdateColumn
回调允许我指定 table 应该在生成的 POCO 中省略它们的 Id
列。
我可以将 UpdateColumn
用于 ErrorLog 和 ChangeLog tables - 这导致 'Id' 属性 从每个 class 中删除,这对于 table-per-type 继承是正确的。但是,这也导致ErrorLog和ChangeLog classes被从生成的DbContext中移除,ErrorLog和ChangeLogclasses中出现如下注释:
// The table 'ChangeLog' is not usable by entity framework because it
// does not have a primary key. It is listed here for completeness.
有没有办法不指定继承关系 导致生成器从模型中省略派生的 tables?
有没有办法阻止生成器包含导航 生成的 POCO 中的属性?
看来您可以解决它:
https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/102
v2.27 中的最新版本(2017 年 1 月 5 日)修复了隐藏列和主键的问题 (#167),现在可以正常使用了。
- 从 https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator 下载 v2.27
- 将您的生成器更新到最新版本(截至今天为 2.27)
- 将生成器重新添加到您的项目(以获取最新代码)并在 .tt 文件中重新实现您的更改。
- 保存 tt 文件。
如有任何问题,请在 https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/181
更新 GitHub 案例