C#MVVM升级到EF5 - 实体成员功能何去何从?

时间:2012-10-02 20:21:10

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

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

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

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

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

    address_ = Address.CreateAddress(-1);

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

    1. 主要Entities类不再包含AddToAddress(Address)函数,然后该函数将获取新的Address对象(表示Addresses表的一行)并将其添加到数据库中。然后我会调用Entities.SaveChanges()来提交添加。这个功能似乎仍然存在。
    2. 任何人都可以帮我解决发生的事情吗?这与EF5工作的新方式有关,还是我的解决方案没有为我提供正确的参考?

1 个答案:

答案 0 :(得分:3)

Whey你重新创建了模型项目,你已经使用完全不同的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中相同。