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.

看来您可以解决它:

https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/102

v2.27 中的最新版本(2017 年 1 月 5 日)修复了隐藏列和主键的问题 (#167),现在可以正常使用了。

如有任何问题,请在 https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator/issues/181

更新 GitHub 案例