实体框架4不支持奇怪重复的通用模式?

时间:2010-06-22 07:56:33

标签: c# .net entity-framework

似乎我使用自定义类作为实体的基础,ObjectContext.CreateObjectSet将因stackoverflow异常而失败

代码是:

// This is generated by EF4 and i modify it to my custom class
public partial class EntityA : GClass<EntityA>
{
    ......
}

public partial class TestEntities : ObjectContext
{
    public ObjectSet<EntityA> EntityAs
    {
        get
        {
            if ((_EntityAs == null))
            {
                // here will throw stackoverflow exception
                _EntityAs = base.CreateObjectSet<EntityA>("EntityAs");
            }
            return _EntityAs;
        }
    }
    private ObjectSet<EntityA> _EntityAs;
}


// This is custom class
public partial class EntityA
{
}

// This is my custom base class
public class GClass<T> : EntityObject where T : class
{
    public virtual string GetStr()
    {
        return "GClass";
    }
}

1 个答案:

答案 0 :(得分:-1)

我建议为实体对象创建一个接口,而不是更改基类。不应修改生成的代码。

更新:由于无法解释的downvotes,我正在添加下面的代码,这正是我的意思:

// Generated by EF4
public partial class EntityA : EntityObject
{
    ...
}

// Interface defined in another file
public interface IGClass<T> where T : IGClass<T>
{
    string GetStr();
}

// Automatically generated by T4 template
public partial class EntityA : IGClass<EntityA>
{
    public virtual string GetStr()
    {
        return "GClass";
    }
}

生成的代码确实使用CRGP,但是通过接口而不是基类来实现。

有关T4模板的更多信息,请here