【问题标题】:Extending Entity Framework Model to include new class扩展实体框架模型以包含新类
【发布时间】:2013-02-03 07:49:18
【问题描述】:

菜鸟问题

我在我的项目中使用实体框架,它在设计器中生成实体,例如:

public partial class CLMEntities : ObjectContext

我希望 CLMEntities 继承项目中的另一个类以获得更多功能:

public class MoreFunctionality

...我当然不能继承,因为它已经继承自 ObjectContext

有什么想法可以做到这一点吗?

【问题讨论】:

  • 你不想切换到POCOs代吗? EF 4.x 和 5.x(以及 VS2010 和 2012)都支持它。那么你的实体类将不会继承其他类。
  • +1 是的,开始使用新一代模板。容易得多。以下来自 Steve Wilkes 的基本技巧仍然适用……您只是使用 DBContext 而不是 ObjectContext。不确定什么设计问题需要从自定义代码继承的“上下文”。您当然可以扩展部分类。包括添加不同的构造函数。

标签: .net entity-framework entity-framework-4 edmx


【解决方案1】:

几个选项,取决于MoreFunctionality 中的功能是什么:

1:使其成为通用的decorator 类而不是父类,如下所示:

public class MoreFunctionality<TEntities> where TEntities : ObjectContext
{
    private readonly TEntities _objectContext;

    public MoreFunctionality(TEntities objectContext)
    {
        this._objectContext = objectContext;
    }

    public TEntities ObjectContext
    {
        get { return this._objectContext; }
    }

    // Other behaviour
}

...并传递装饰器而不是 ObjectContext

2:将其设为接口并使用extension methods 添加行为,如下所示:

public interface IMoreFunctionality
{
}

public partial class CLMEntities : ObjectContext, IMoreFunctionality
{
}

public static class MoreFunctionalityExtensions
{
    public static void SomeFunctionality(
        this IMoreFunctionality moreFunctionality)
    {
        // Do something...
    }

    public static void SomeMoreFunctionality(
        this IMoreFunctionality moreFunctionality)
    {
        // Do something else...
    }
}

【讨论】:

  • TNX ,在选项 1 中,如果我由生成器再次生成 edmx,它会改变吗? PLZ,您可以更具体地解释选项 2,非常感谢!
  • 选项 1 不会受到重新生成 CLMEntities 的影响。给我一个您在MoreFunctionality 中的行为示例,我会看看是否可以使用它更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
相关资源
最近更新 更多