2010-03-18 85 views
2

我开始使用模型优先开发的实体框架4。我正在构建一个简单的WPF演示应用程序来学习框架。我的应用程序有两个实体,主题和注释。一个话题是一个讨论话题;它具有标题,文本和DateRevised属性。主题还有一个Notes集合属性。 Note具有DateCreated和Text属性。使用T4模板为EF4生成的实体添加自定义代码?

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

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

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

回答

2

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

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

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

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

没有开玩笑!谁会认为这很简单?我喜欢EF4,我更喜欢它。任何建议如何实现Note.DateCreated代码?这通常会在构造函数中进行,因为它仅在创建Note时设置,而不是在其文本更改时设置。 – 2010-03-18 16:22:05

+0

是的,构造函数很好。你可以添加一个无参数的构造函数到部分类,它会工作。但是,您可能还想考虑您的业务规则层,具体取决于您在做什么。 – 2010-03-18 16:35:12

+1

为了研究这个问题的其他人的利益 - 我没有意识到一个部分类可以有它自己的构造函数。如果有两个部分类,则两个构造函数都会运行。 – 2010-03-18 19:26:05

相关问题