【问题标题】:Separating entity framework poco and objectcontext分离实体框架poco和objectcontext
【发布时间】:2011-07-30 18:05:36
【问题描述】:

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

但我想这样做并将 ObjectContext 类(例如:SomeEntities)和表类分离到两个类库。

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

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

【问题讨论】:

  • 您仍然可以将 CodeFirst 与现有数据库一起使用。
  • @taylonr - 这不是代码优先,它使用 DbContext API 和数据库优先。 Code-first = 编写代码并让 EF 生成 DB。 Code-first != DbContext API,它只是 DbContext API 和 Code-first != fluent 映射的子集,因为您可以使用 fluent 映射到现有数据库,这意味着首先创建数据库,而不是代码。
  • 虽然您的评论是真实的,但它也表明人们正在使用的方法。很多时候,当人们说他们首先编写代码时,他们的意思是他们正在使用 DB 上下文和 POCO。尤其是在这种情况下,用户首先在谈论他是如何做 DB 的,所以他有一个 edmx。我应该更清楚地说他可以以代码优先的方式进行 POCO,而不会覆盖他的数据库。

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


【解决方案1】:

由于您的标题中有“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 文件。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 2012-03-04
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多