使用EF4 POCO Generator T4模板。
然后是的,你可以将POCO类和ObjectContext分离成两个不同的类库。在T4模板是该方案准备,因为它由两个不同的文件:
- POCOGenerator.Context.tt - >负责创建派生的ObjectContext
- POCOGenerator.tt - >负责创建您的POCO实体
如果您在具有EDMX文件的类库中添加POCO生成器,那么默认情况下两个tt文件都将添加到那里。
但你可以移动,然后第二个文件(POCOGenerator.tt)到另一个类库。 (上下文所在的EDMX项目需要引用该库来识别POCO类。)然后在文本编辑器中打开该文件。一些在这个文件中的第一行会看起来像:
...
string inputFile = @"MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
...
现在,您需要将路径更改为EDMX文件(仅在POCOGenerator.tt,离开POCOGenerator.Context.tt不变)。假设你有EDMX项目,并在Visual Studio中相同的解决方案POCO项目,新的路径可能是:
...
string inputFile = @"..\..\MyEDMXProject\MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
...
现在,您可以从两个不同的项目分别执行这两个文件。一个将创建上下文文件,另一个将创建您的POCO文件。
您仍然可以将CodeFirst用于现有数据库。 – taylonr 2011-04-06 11:42:59
@taylonr - 这不是代码优先的,它使用DbContext API和数据库优先。 Code-first =编写代码并让EF生成DB。 Code-first!= DbContext API,它只是DbContext API的子集以及Code-first!=流畅映射,因为您可以使用流畅映射到现有数据库,这意味着数据库是首先创建的,而不是代码。 – 2011-04-06 21:28:48
虽然您的评论是真实的,但它也表明人们使用的方法。很多时候,当人们说他们首先执行代码时,他们意味着他们正在使用数据库上下文和POCO。特别是在这种情况下,用户正在谈论他如何先做DB,这样他就有了edmx。我应该更清楚一点,并说他可以用代码优先的方式来做POCO,而不是覆盖他的分贝。 – taylonr 2011-04-06 21:44:44