2011-04-06 116 views
4

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

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

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

有没有办法做到这一点? 我不使用codefirst因为有一个数据库,并DATAS在里面, 我没有使用modelfirst同样, 我使用databasefirst但既然你已经在你的标题是“POCO”我猜,你是不能单独

+1

您仍然可以将CodeFirst用于现有数据库。 – taylonr 2011-04-06 11:42:59

+2

@taylonr - 这不是代码优先的,它使用DbContext API和数据库优先。 Code-first =编写代码并让EF生成DB。 Code-first!= DbContext API,它只是DbContext API的子集以及Code-first!=流畅映射,因为您可以使用流畅映射到现有数据库,这意味着数据库是首先创建的,而不是代码。 – 2011-04-06 21:28:48

+1

虽然您的评论是真实的,但它也表明人们使用的方法。很多时候,当人们说他们首先执行代码时,他们意味着他们正在使用数据库上下文和POCO。特别是在这种情况下,用户正在谈论他如何先做DB,这样他就有了edmx。我应该更清楚一点,并说他可以用代码优先的方式来做POCO,而不是覆盖他的分贝。 – taylonr 2011-04-06 21:44:44

回答

8

使用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文件。

+0

的描述是正确的。我在这里回答了类似的问题:http:// stackoverflow。com/questions/5558996/where-to-place-the-entity-framework-in-our-solution/5559032#5559032你可以在那里找到指向演练的链接。 – 2011-04-06 21:30:10

+0

谢谢你的回答 – barteloma 2011-04-07 08:40:25