使用EF5对数据库第一种方法和POCO生成的困惑

时间:2013-01-04 15:57:48

标签: entity-framework visual-studio-2012

当我做一个创建.edmx文件的数据库第一种方法时,我对VS.NET 2012中的EF5发生了什么感到困惑。我之所以感到困惑的原因是因为有很多关于EF 4.x的信息,我认为很多信息与EF5相比都是不准确的。

在EF4中使用POCO和数据库第一种方法,可以创建POCO类,并确保设置代码生成策略=无。然后创建一个单独的'Entites'类,它继承自'ObjectContext',它具有我们用于EF的POCO类的知识。

在使用VS.NET 2012的EF5中,当我执行数据库第一种方法时,代码生成策略=无 已设置,并且生成的类由默认生成T4模板,似乎已经为我创建了POCO类。生成的类在ObjectContextDBContext上没有继承。这是自动生成的实体现在默认创建为POCO类的方式吗?

如果答案是'是',我实际上非常喜欢这个。我的主要问题是,我可以将那些POCO课程拉到另一层吗?现在它们显示在'MyModel.tt'下,所以如果我删除它们,我想如果我更新模型,任何更改都不会反映出来,对吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

  

在EF4中使用POCO和数据库第一种方法,可以创建   POCO类,并确保设置代码生成策略=   没有。然后创建一个单独的说'Entites'类继承自   `ObjectContext',它具有我们的POCO类的使用知识   与EF。

这是一个核心想法,但您也可以使用从VS Gallery下载的其他T4模板,这些模板将为您生成POCO课程。

  

在使用VS.NET 2012的EF5中,当我做数据库第一种方法时,Code   生成策略=已设置无,以及生成的类   由默认的T4模板生成,似乎已经创建了POCO   我的课程。结果类没有继承   ObjectContext或DBContext。这是自动生成实体的方式   现在默认创建为POCO类?

是。默认情况下,VS 2012使用T4模板从模型生成POCO类。

  

我可以将那些POCO课程拉到另一层吗?现在他们   显示在'MyModel.tt'下,所以如果我删除它们,我想是的   如果我更新模型,那么更改不会反映出来吗?

是的,你可以有一些限制。您可以将整个.tt文件移动到另一个文件夹或项目,只需更新此文件中的路径即可指向EDMX文件的正确位置。 .tt文件是T4模板,负责生成POCO类。主要限制可能是自动更新 - 使用默认配置,模板会在保存EDMX文件时自动更新和保存。保存模板将触发所有POCO类的重新生成(=另一个限制 - 不要修改这些自动生成的类)。当您将模板移动到另一个项目时,此autonic不起作用,您必须从.tt文件的上下文菜单中手动触发运行自定义工具以强制进行类重新生成。