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