gpt4 book ai didi

entity-framework - 将 .edmx 加载到 DbModelBuilder

转载 作者:行者123 更新时间:2023-12-02 02:24:20 25 4
gpt4 key购买 nike

我计划在我的下一个项目中使用 Entity Framework 4.1,但我很难找到实现它的好方法。简而言之,我想构建一个多层应用程序,其中实体将通过 Web 服务进行传输,并且为了尽可能保持干净,我想使用 POCO 而不是 self 跟踪实体。此外,已经存在一个 SQL 2008 数据库,将用于作为实体的基础。

从我目前读到的内容(从 Julie Lerman 关于 http://msdn.microsoft.com/nl-nl/magazine/hh148150%28en-us%29.aspx 的文章,等等)来看,似乎:

  • 如果您使用数据库优先方法,您会得到一个漂亮的 .edmx 来编辑您的模型,但您最终总是会得到持久性感知对象而不是 POCO,这在我的情况下没有用。
  • 如果您使用代码优先方法,“ADO.NET DbContext 生成器”只能部分帮助您:它确实从 .edmx 生成实体,但它不会生成获取外键和基数正确所需的代码.这意味着代码不会开箱即用(-编辑,不正确,请参阅下面的帖子-),您要么必须
    • a) 在您的 POCO 上使用数据注释,这在我看来是丑陋的,因为它用数据库信息污染了 POCO,并且还创建了对 EntityFramework 程序集的依赖。
    • b) 使用传递给 DbContext.OnModelCreating 的 DbModelBuilder 来设置正确的外键、映射等信息(即“流畅的”API)。即使 API 可能“流畅”,仍然很难(并且可能无法维护)正确设置所有这些信息以使其与现有数据库匹配(有关这方面的一些示例,请参见 http://sessionfactory.blogspot.com/2011/04/conventions-in-entity-framework-41.html)。

我意识到“DbModelBuilder 方式”需要如此多努力的原因是因为它被设计为以相反的方式使用:您应该从实体定义生成数据库,而不是尝试调整所有实体,以便它们(希望)匹配一个已经存在的数据库。然而,在我看来,“DbModelBuilder 方式”最终会产生最好的结果:纯 POCO,其中没有数据库元数据。

说了这么多,我的问题是:
有谁知道将.edmx加载到DbModelBuilder中的方法,这样就不需要通过fluent API手动指定外键、列映射等信息了?

我认为这将是两全其美的方法,因为您可以像在数据库优先方案中那样直观地编辑映射,并且仍然获得干净的 POCO,因为所有必需的元数据都存储在 DbModelBuilder 中。

最佳答案

老兄,你在说什么?

If you use the Database First approach, you get a beautiful .edmx to edit your model in, but you'll always end up with persistence-aware objects rather than POCO's, which is not useful in my situation.

事实并非如此。 EDMX 几乎可以生成代码优先可以生成的所有内容,甚至可以生成许多代码优先无法生成的内容。

If you use the Code First approach, the "ADO.NET DbContext generator" only partially helps you: it does generate entities from the .edmx, but it doesn't generate the code required to get the foreign keys and cardinality correct. This means that the code will not work out-of-the-box, ...

事实并非如此。正确设置 EDMX 后,它将准确创建您想要的实体。

Does anyone know of a way to load an .edmx into the DbModelBuilder

那条路就是 DbContext T4 生成器!

无论如何,您还可以检查另一种工具:EF Power Tools CTP1 .此工具可以从现有数据库创建代码优先映射。

当然,每个工具都会创建与数据库 1:1 映射的模型。如果您想要更多,您必须手动修改模型或映射!

关于entity-framework - 将 .edmx 加载到 DbModelBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com