C# MVVM 升级到 EF5 - 实体成员函数去哪儿了?

标签 c# .net visual-studio entity-framework mvvm

我有一个大型 MVVM 类型的解决方案,最初是使用 VS2010 Express 和 .NET4 编写的。该模型使用实体来访问 SQL Server 2012 数据库。

我最近设法丢失了模型项目,这似乎没什么大不了的,因为它实际上由自动生成的实体组成,并进行了一些小的修改。因此,我使用 VS2012 和 .NET4.5 和 EF5 重新创建了模型项目。我已将 ViewModel 升级到 .NET4.5 并使用包管理器导入了 EntityFramework。

问题是,我的 ViewModel(一个单独的类库)抛出了几个我无法弄清楚的编译时错误。这些围绕:

  1. 主实体类(在我的例子中为 CN2Entities)不再具有采用连接字符串的构造函数。这可以通过自动完成来确认,它只提供无参数构造函数。
  2. 映射到数据库表的各个数据库对象类(例如“地址”)不再包含其静态成员。例如:

    address_ = Address.CreateAddress(-1);

此代码用于为我提供一个漂亮的空地址记录来填充并添加到数据库中。这不再有效。事实上,Address 类唯一的静态成员似乎是“Equals”和“ReferenceEquals”。

  1. 主 Entities 类不再包含 AddToAddress(Address) 函数,该函数将获取新的 Address 对象(表示 Addresses 表的一行)并将其添加到数据库中。然后我会调用 Entities.SaveChanges() 来提交添加。这个功能似乎仍然存在。

谁能帮我看看发生了什么事吗?这是否与 EF5 的新工作方式有关,或者我的解决方案是否已损坏,无法为我提供正确的引用?

最佳答案

当您重新创建模型项目时,您使用了具有完全不同的 API(以及不同的自动生成策略)的 Entity Framework 5。自 EF 4.1 起,EF 有两个 API,但在 VS 2010 中,第二个 API (DbContext API) 是可选的,并且仅在引用单独的程序集后才可用。在 VS 2012 中,当您添加 EDMX 时,DbContext API 被假定为默认值(VS 从 NuGet 下载附加程序集)。

您仍然可以使用旧的 API - 在解决方案资源管理器中展开 EDMX 文件并删除所有扩展名为 .tt 的文件。之后,打开 EDMX 图并在属性中将“代码生成策略”从“无”更改为“默认”并保存图。它应该为旧 API 生成类,但我不知道代码生成器是否与 VS 2010 中的代码生成器相同。

关于C# MVVM 升级到 EF5 - 实体成员函数去哪儿了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697669/

相关文章:

c# - 放置在 UpdatePanel 中时无法使用 ClientScript.RegisterStartupScript 显示警报

.net - Fluent NHibernate 中 Access.BackingField 的用例是什么?

c# - nest yields to return IEnumerable<IEnumerable<T>> with lazy evaluation

visual-studio-2010 - Visual Studio 中的 Wiki 引擎?

c# - Xamarin.Forms Shared不在Android View 中显示图像,但在iOS View 中显示图像

c# - NHibernate QueryOver group by 不选择按列分组

c# - 如何确定 .NET 中的 CPU 缓存大小?

c# - WPF MVVM subview 模型属性不更新 View

android - [INSTALL_FAILED_INVALID_APK]Xamarin.Forms 缺少 Base.apk

c# - VS WPF设计器: how to add control from referenced project to a form in the main project