我对EntityFramewok完全陌生,但下周我必须和我的朋友一起写一个有截止日期的项目。他创建了数据访问层,并与我共享了代码。在使用ADO.NET实体数据模型之后,我在他的类中发现了错误。看来他使用了我没有的Add()方法。经过快速搜索,我发现他为上下文生成的模板继承了DbContext之后,我继承了ObjectContext之后。为甚麽会这样呢?我们使用的是相同版本的EntityFramework。
发布于 2013-12-05 06:28:31
根据您的评论,这是因为您使用的是VS2010,而他使用的是VS2012。在VS2012中,默认代码生成从ObjectContext更改为DbContext。您可以通过删除ObjectContext模板并将“代码生成策略”设置从“无”更改为“默认”,将其更改为T4。
然而,VS2010只支持v2 EDMX,而VS2012支持V3 EDMX,如果您在VS2012上创建模型,则无法在VS2010中打开它。类似地,我不确定是否可以在.NET中针对VS2010 Framework4.5,但这是VS2012中的默认设置。
理想情况下,您应该使用相同的环境,因为在VS2010和VS2012中您可以做的事情有很多不同之处。如果您不能统一您的环境,我建议您针对相同的.NET框架(除非VS2010可以针对.NET Framework4.5)使用EF6 (最新和最大的、可部署的、不依赖于System.Data.Entity.dll )--考虑到.NET Framework4.5是一个现成的更新,并且您永远不知道针对.NET框架4的应用程序实际上运行在.NET框架4或.NET Framework4.5上,并且使用CodeFirst方法来避免v2与v3 Edmx之间的问题。
发布于 2013-12-04 19:11:37
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);https://stackoverflow.com/questions/20383501
复制相似问题