“Default”和“Legacy ObjectContext”代码生成之间是否存在根本区别

时间:2014-02-10 11:53:43

标签: vb.net entity-framework visual-studio visual-studio-2012 objectcontext

我有一个最初使用ef4构建的实体数据模型,用于我的应用程序。此应用程序广泛使用C1 studio for Entity Framewaork,因此需要使用ObjectContext而不是DBContext(至少目前)。

此模型最初是在visual studio 2010中创建的(默认情况下创建对象上下文),然后移植到Visual Studio 2012和EF5.0(在研究了如何创建(和维护对象上下文)之后)默认模型)。

我已经开始考虑将此应用程序移植到visual studio 2013(但暂时保留使用EF5.0),默认情况下将实体数据模型基于dbContext。 Visual Studio Gallery上有一个EF5.0实体对象生成器,允许用户使用代码生成策略“Legacy ObjectContext”创建(或者可能更新)实体数据模型。

因此,在我从数据库更新模型(添加了一些我想要使用的新sprocs)之前,我已经将应用程序的完整备份移植到vs 2013而没有任何问题。此时我开始在模型中获得一系列构建错误。然而,我可以在VS 2012中自行打开数据模型,更新并构建它,然后在没有任何问题的情况下重新打开vs2013中的整个应用程序,并再次构建整个应用程序而不会出现问题。

因此,我的问题是,两个版本的visual studio基于objectContext构建实体数据模型的方式是否真的存在根本区别,如果Legacy ObjectContext生成器的一个方面我错过了配置正确。

我欢迎任何建议或意见。正如我在开始时所说的,避免使用ObjectContext目前不是一个选项。我希望在不太遥远的未来改变,但暂时不能改变。如果这意味着要记住在vs 2012中对模型进行调整,那就这样吧。我现在只是好奇。

1 个答案:

答案 0 :(得分:4)

“默认”选项已重命名为使用VS2013的EF6工具中的“Legacy ObjectContext”(以及VS2012的带外EF6工具)。原因是即使在VS2012中,“默认”选项也不再是默认选项,因为“无”选项是默认选项,非常有趣。

为了澄清VS2010和VS2012中的“默认”代码生成策略是使用内置代码生成器并生成ObjectContext上下文和基于EntityObject的实体。 “无”选项根本不会生成代码以允许添加到项目中的T4模板生成代码。在VS2012中,“无”选项是默认选项,EF Designer会将T4模板(.tt文件)添加到项目中,这将生成基于DbContext的上下文和POCO实体。

在EF6工具(即VS2013和VS2012的带外版本)中,“默认”选项已重命名为 Legacy Object Context“和”None“选项被重命名为”T4“。创建EF6模型时,”Legacy Object Context“被禁用,因为生成的代码无效。

如果您仍然需要/想要使用基于ObjectContext的上下文,则可以下载Visual Studio库中的T4模板以实现该目的。最后,如果在将代码生成策略切换为Default / Legacy Object后出现错误,请确保删除edmx文件的T4模板。否则,您将获得重复的实体和上下文集(一个从T4创建,一个从代码生成器创建),这将冲突。 你可以在我前一段时间写的blog post中找到更多相关细节。