3

实体框架4.1数据库第一,在生成的c#类中有一个构造函数,那么我可以在哪里做我的部分类自定义初始化?实体框架4.1部分类初始化

+0

我刚试过,生成的类没有定义构造函数。 (我认为我使用的是EF 4.0) – svick

+0

yes在4.0中可以,因此我创建了自己的构造函数,但是在4.1中,嵌套类型的类将创建一个构造函数来初始化嵌套字段 – tahir

+1

不生成构造函数调用一些你可以实现的“partial”方法? – svick

回答

7

据我了解,您的项目中有一个类似Model.edmx的文件,它实际上并不生成任何代码。然后你有Model.tt,这是EF 4.1实际用来生成代码的。你可以修改这个Model.tt。因此,如果您想要为每个生成的实体添加对部分方法OnInitialized()的调用(从其构造函数中调用),请在Model.tt的代码中找到构造函数(其第一行应该类似于public <#=code.Escape(entity)#>()),然后添加来电OnInitialized()地方到构造并宣布部分方法:

partial void OnInitialized(); 

使用运行自定义工具重新生成实体就大功告成了。现在你可以做这样的事情在你的非生成的代码:

partial class SomeEntity 
{ 
    partial void OnInitialized() 
    { 
     // custom initialization code goes here 
    } 
} 

我不知道EF 4.1,所以它可能是有一个更好的办法。

+0

它按预期工作,谢谢! – tahir

0
  1. 添加一个基类:

    public class CallBase 
    { 
         protected CallBase() 
         { 
          Initialize(); 
         } 
    
         protected abstract void Initialize(); 
    } 
    
  2. 添加局部类实现在另一个文件

    public partial class Call: CallBase 
    { 
        protected owerride void Initialize(); 
        { 
        ... 
        } 
    } 
    

的缺点是,所述初始化方法将之前被叫所有收集生物。