2

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

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

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

  1. 主实体类(在我的例子中是 CN2Entities)不再有一个接受连接字符串的构造函数。自动完成证实了这一点,它只提供了一个无参数的构造函数。
  2. 映射到数据库表的各个数据库对象类,例如“地址”不再包含它们的静态成员。例如:

    地址_ = 地址。创建地址(-1);

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

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

任何人都可以帮我解决发生了什么吗?这与 EF5 的新工作方式有关,还是我有一个损坏的解决方案没有为我提供正确的参考?

4

1 回答 1

3

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

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

于 2012-10-02T21:21:59.513 回答