分离实体框架poco和objectcontext

bar*_*oma 4 entity-framework entity-framework-4 database-first

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

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

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

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

Sla*_*uma 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);
...
Run Code Online (Sandbox Code Playgroud)

您现在需要更改edmx文件的路径(仅在POCOGenerator.tt中,保持POCOGenerator.Context.tt不变).假设您在Visual Studio的同一解决方案中有edmx项目和POCO项目,则新路径可能是:

...
string inputFile = @"..\..\MyEDMXProject\MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
...
Run Code Online (Sandbox Code Playgroud)

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