【问题标题】:EF 4.1 code first with Existing Database.Mapping Fks,table etc.Clarification neededEF 4.1 代码首先使用现有数据库。映射 Fks、表等。需要澄清
【发布时间】:2011-04-25 19:20:00
【问题描述】:

我首先学习代码,我有一个项目要与现有数据库一起使用。

我对自己的意思有点困惑。我会解释一下:

  • 是否需要为现有数据库中的每个表创建实体配置?
  • 我需要在每个表的这个 EntityConfiguration 中创建外键关系吗?
  • 是否需要为现有数据库中的每个表创建一个 ToTable?
  • 是否有任何免费工具“codeplex”指向现有数据库会生成此 codeFirst 内容?

我似乎很少有关于“EF Code first with existing db”的博客,但我不确定或不清楚是否需要创建这些东西,否则我会收到像“MyColumn_MyColum”这样的奇怪错误,基本上就像 codeFirst 是尝试构建一些 FK 或其他东西。

有人可以澄清一下吗? 多谢。我知道问题很少,但如果你能回答 01 或 2 就好了。

再次感谢

【问题讨论】:

    标签: mapping ef-code-first entity-framework-4.1


    【解决方案1】:

    如果您希望为您生成代码,请使用database-first approach with DbContext API。只需从您的数据库创建 EDMX 文件,然后让 DbContext Generator 模板为您生成所有实体和上下文。

    DbContext Fluent API 主要针对代码优先的开发方法,EF 将根据您提供的代码为您创建数据库。它可以与现有数据库一起使用,但它需要更多的技能和对 EF 可以提供给您的映射的理解。

    一般:

    • 如果遵循一些命名约定,则不需要为每个表提供EntityConfiguration(实体名称是表名的单数形式,所有属性具有相同的名称,表和实体中的主键命名为 Id 或EntityNameId 等)。
    • 如果您遵循公开导航属性和可能还有外键属性的约定,则无需手动定义关系。问题可能是多对多键和联结表的命名。
    • ToTable 仅在您的实体不遵循命​​名约定或映射某些高级继承或拆分时才需要。

    EF 使用a lot of default conventions 来驱动如何定义名称。可以删除约定。

    如果您为每个表定义 EntityConfiguration,您将不会做错任何事情 - 它至少可以让您了解需要什么,并且您的映射将是明确的/自我记录的。

    【讨论】:

    • 感谢您的及时回复。我使用 Edmx 做了一个项目,但遇到了很多问题。我们想使用 codefirst。理想情况下,我们会从头开始一切,但对于一个特定的项目,我们已经有一个db ,这可能不是一件坏事,因为它会迫使我们更多地了解映射是如何工作的!我们所有的表都有单数名称。是的,我确实有很多联结表,而且很多对多,这很棘手。我会看看这些约定。是否有任何解决方法可以以某种方式生成关系等。然后复制并粘贴它们?edmx 是否生成相同的鳕鱼
    • 查看了那些约定,但 msdn 并没有说明太多。看不到约定实际上是什么。
    • DbContext Generator 模板不会生成代码优先映射。它仍然使用 Edmx 作为映射数据的来源。没有解决方法——或者至少没有官方的。 Fluent API 是关于编写代码而不是生成代码。
    • 关于约定我是否遗漏了什么或者在 msdn 中您实际上看不到它们是什么。EG 外键应该是“tablename_id”等...
    • 是的,这是可能的。它应该首先用作代码,因此文档没有描述如何将它与现有数据库一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2020-04-07
    • 2016-06-06
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多