似乎我使用自定义类作为实体的基础,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";
}
}
答案 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。