使用T4模板将自定义代码添加到EF4生成的实体?

时间:2010-03-18 15:28:34

标签: entity-framework t4

我开始使用模型优先开发实体框架4。我正在构建一个简单的WPF演示应用程序来学习框架。我的应用程序有两个实体,Topic和Note。主题是讨论主题;它具有Title,Text和DateRevised属性。主题还具有Notes集合属性。 a Note具有DateCreated和Text属性。

我使用EF4为应用程序创建EDM和数据存储。现在我需要为实体添加一点智能。例如,Topic.Text属性的属性设置器需要更新Topic.DateRevised属性,而Note需要在实例化时设置其DateCreated属性 - 非常简单的东西。我假设我无法直接修改生成的类,因为如果重新生成实体,我的代码将会丢失。

这是我可以通过修改EF4用来生成实体的T4模板来实现的吗?换句话说,是否可以修改T4模板以将我的代码添加到它生成的实体中以执行这些任务?你能给我一个很好的教程或如何开始的解释吗?

到目前为止,我发现的大部分内容都是关于如何将tt文件添加到EDM,所以我可以这样做。正如我所描述的那样,假设可以使用T4模板来定制生成的实体,我正在寻找的是一种可用于进入下一级别的资源。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您可以在没有T4的情况下使用部分类和部分方法执行此操作。

每个EF属性都有一个部分OnPropertyNameChanged方法。如果在部分类中实现该功能,则可以添加所需的行为,并且在更新时不会丢失更改。

所以你要添加一个新文件,比方说Topic.cs。在那里,你会写:

namespace MyNamespace
{
    public partial class Topic 
    {
        partial void OnTextChanged()
        {
            this.DateRevised = DateTime.Now;
        }
    }
}