【问题标题】:entity framework 4.1 partial class initialisation实体框架 4.1 部分类初始化
【发布时间】:2011-08-21 15:46:38
【问题描述】:

首先在Entity Framework 4.1数据库中,生成的c#类中有一个构造函数,那么我在哪里可以做我的部分类自定义初始化呢?

【问题讨论】:

  • 我刚试过,生成的类没有定义构造函数。 (我想我正在使用 EF 4.0。)
  • 是的,在 4.0 中没问题,所以我正在创建自己的构造函数,但在 4.1 中,具有嵌套类型的类将创建一个构造函数来初始化嵌套字段
  • 生成的构造函数不是调用了一些你可以实现的partial方法吗?
  • 不,类代码很干净(不像4.0...)但是类只有字段和构造函数,并且从无继承,所以很难自定义初始化跨度>

标签: c# entity-framework entity-framework-4.1 partial-classes


【解决方案1】:

据我了解,您的项目中有一个像 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,所以可能有更好的方法。

【讨论】:

    【解决方案2】:
    1. 添加基类:

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

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

    缺点是初始化方法会在所有集合生物之前被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多