EF Code First:识别动态代理的最佳方式

时间:2012-04-26 13:18:03

标签: entity-framework-4.1 ef-code-first

知道我的代码第一个实体是否来自直接代码(new DataObject())

的最佳方法是什么?

或来自上下文(Context.DataObjects.First())

由于我没有阻止我的上下文使用动态代理,我可以这样做:

    protected DataObject()
    {
        if (this.GetType().Namespace != "System.Data.Entity.DynamicProxies")
        {
            this.Id = IdGenerator.NextId<DataObject>();
        }
    }

但这看起来很糟糕,因为GetType()很贵。

谢谢

1 个答案:

答案 0 :(得分:1)

如果要检查实体的类型,则必须调用GetType。顺便说一句。直接在MSDN上推荐解决方案。要从DbContext获取ObjectContext实例,您可以使用:

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;