分离实体框架poco和objectcontext

时间:2011-04-06 11:33:15

标签: entity-framework entity-framework-4 database-first

到目前为止,我正在创建一个classLibrary项目,并从exixting数据库中插入新的Ado.net Entity数据模型和genareting。类和对象类代码自动创建。 这对我来说并不重要。

但我想这样做并将ObjectContext类(例如:SomeEntities)和table classess分隔为两个calss库。

当我更改数据库表属性时,我将更新edmx模型,类将自动更新。

有没有办法做到这一点? 我没有使用codefirst因为它有一个数据库和数据, 我同样不使用modelfirst, 我正在使用databasefirst但无法分开

1 个答案:

答案 0 :(得分:8)

由于你的标题中有“poco”,我猜你正在使用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不变)。假设您在Visual Studio的同一解决方案中有edmx项目和POCO项目,则新路径可能是:

...
string inputFile = @"..\..\MyEDMXProject\MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
...

现在,您可以从两个不同的项目中分别执行这两个文件。一个将创建上下文文件,另一个将创建您的POCO文件。