c# - Entity Framework 6.0实体自定义构造函数逻辑实现

标签 c# entity-framework-6

我正在使用 EF 6.0,并且希望将自定义逻辑添加到 Model.edmx 文件生成的任何类的默认构造函数执行中/之后。发现在已弃用的 EntityObject 生成器版本中,每个生成的类中都有部分 void OnCreated 方法,可以在部分类中覆盖该方法以实现我想要的,但找不到任何主题,并且无法弄清楚如何在没有弃用方法的情况下执行此操作用法。例如,我生成了下一个项目的集合:

public virtual DbSet<AnswerOption> AnswerOptions { get; set; }

我的自定义生成的类是 AnswerOption,我需要自定义它在 Model.cs 文件中生成的默认构造函数:

public partial class AnswerOption
{
    public AnswerOption()
    {}
}

或者至少在我的分部类中定义的默认构造函数调用之后执行一些代码

最佳答案

最终编辑 Model.tt T4 模板文件。删除了无参数构造函数生成的默认条件(对于我的情况是 34,35,64 行):

if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any())
{
}

已添加

partial void OnConstructorConpletion();

生成每个实体类,并在无参数构造函数末尾调用它:

#>
public <#=code.Escape(entity)#>()
{
<#
    //default T4 logic that was processing properties
#>
    OnConstructorConpletion();
}

partial void OnConstructorConpletion();
<#

因此,T4 模板从问题样本中生成类的结果代码是:

public partial class AnswerOption
{
    public AnswerOption()
    {
        OnConstructorConpletion();
    }
}

关于c# - Entity Framework 6.0实体自定义构造函数逻辑实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31793997/

相关文章:

C#:如何使窗体记住其边界和 WindowState(考虑双显示器设置)

c# - 获取 Firefox 网址?

c# - EF - SqlQuery - 数据读取器中没有相应的同名列

c# - 如何使用 Databound Itemscontrol 自定义 DataGrid 的 header

c# - 将列表组合成一个列表,其中最便宜的列表

c# - 在卸载期间(卸载前)从自定义安装程序获取对 AppSettings 的访问权限

entity-framework - 捕获 "Sequence contains no elements"的最佳方法

c# - EntityFramework 按 linq 查询分组

c#-4.0 - Entity Framework : Invalid column name *_ID1

c# - 具有 ComplexType 的 BulkInsert 实体