ObjectContext而不是DbContext

时间:2013-12-04 18:53:04

标签: entity-framework entity-framework-5

我对EntityFramewok完全不熟悉,但我必须在下周与我的朋友一起写截止日期。他创建了数据访问层和共享代码。使用ADO.NET实体数据模型后,我在他的类中发现了错误。他似乎使用了我没有的Add()方法。在快速搜索之后,我发现他为Context生成的模板在DbContext之后继承,并且在ObjectContext之后继承。 为什么会这样? 我们使用相同版本的EntityFramework。

2 个答案:

答案 0 :(得分:5)

根据您的评论 - 这是因为您正在使用VS2010并且他正在使用VS2012。在VS2012中,默认代码生成从ObjectContext更改为DbContext。您可以通过删除T4模板并将“代码生成策略”设置从“无”更改为“默认”来将其更改回ObjectContext。

然而,故事还有更多 - 开箱即用的VS2010仅支持v2 EDMX而VS2012支持V3 EDMX,如果你在VS2012上创建一个型号,你将无法在VS2010中打开它。同样,我不确定您是否可以在VS2010中定位.NET Framework 4.5,但它是VS2012中的默认设置。

理想情况下,您应该使用相同的环境,因为您在VS2010和VS2012中可以做的事情之间存在很多差异。如果你无法统一你的环境,我建议使用EF6定位相同的.NET Framework(可能必须是.NET Framework 4,除非VS2010可以针对.NET Framework 4.5)(最新且最好的,可以部署bin,不依赖于System。 Data.Entity.dll - 重要的是.NET Framework 4.5是一个就地更新,你永远不知道你的应用程序是针对.NET Framework 4实际上是在.NET Framework 4或.NET Framework 4.5上运行)并使用CodeFirst方法避免v2与v3 Edmx问题。

答案 1 :(得分:1)

DbContext就像ObjectContext的包装一样。您可以做的是创建一个帮助类,其方法可以从ObjectContext公开您的DbContext

using System.Data.Objects;

public static class DbContextExtentions
{
    /// <summary>
    /// Exposes the ObjectContext from DbContext
    /// </summary>
    public static ObjectContext ToObjectContext(this DbContext dbContext)
    {
        return (dbContext as IObjectContextAdapter).ObjectContext;
    }
}

用法:

var myObjectContext = DbContextExtentions.ToObjectContext(myFriendsDbContext);