【问题标题】:How to map classes from DBContext Generator to existing POCO domain classes如何将 DBContext Generator 中的类映射到现有的 POCO 域类
【发布时间】:2012-08-19 19:58:20
【问题描述】:

我是实体框架和数据库优先方法的新手。谁能帮帮我吗?

情况如下:

我有一个干净、普通的域类(Person),只有属性。这个类是在一个 VS 项目中定义的,它只包含领域类,没有对实体框架或其他属于数据访问层的东西的引用。

我还有一个数据库表 (tblPerson)。我为它创建了一个 EDMX 并使用 DbContext Generator 为其创建 POCO 类。

使用域类将实体框架引用与项目分开很重要,我想使用结合依赖注入的存储库模式。

问题是:

如何将实体框架 POCO 类“映射”到我现有的域类?它们具有相同的属性。我已经阅读了一些关于代理、伙伴课程等的内容,但没有找到任何好的示例。

请帮忙。


假设域模型类看起来像这样(只是一个例子):

public class Person
{
   public int Id { get; set; }
   public string Name { get; set; }
}

和数据库表有相同的列:

Id (int, not null, 主键) 名称(nvarchar(50),不为空)


更新:

好的,我找到了解决方案。我做了 Ladislav Mrnka 的建议并从 ObjectContext 派生。这是一个描述如何完成的页面:Entity Framework 4.0 – Part4: How to use your own POCO’s

【问题讨论】:

  • 你不需要任何 EF POCO 类,除非你的域类需要一些特殊的东西。您可以直接映射到您的域类(顺便说一句。只有属性的域类听起来根本不像域类)。用表、poco 类和域类的一些示例更新您的问题,并描述您需要额外映射层的原因 - 提示:将 EF 的引用与域类项目分开不是充分理由,因为您的 EF poco 类可以分开没有任何参考 EF 的项目。
  • 感谢您的回答。如何将 EF 直接映射到我的域模型类?这将是我的问题的解决方案。我不能先使用代码,因为数据库已经存在并且正在使用中。
  • 您在 EDMX 中的实体必须与您的域类完全匹配。您需要关闭代码生成并使用ObjectSet 和您的域类创建自己的派生上下文(如果需要)。
  • 好的。 EDMX 与我的域模型类完全匹配,所以我也会尝试 google 并阅读有关如何创建派生上下文的信息。非常感谢。
  • 您绝对可以先将代码用于现有数据库和新数据库

标签: entity-framework poco dbcontext edmx database-first


【解决方案1】:

如果要将“域对象”映射到 EF 生成的 POCO 类,则可以使用映射器,例如 AutoMapper https://github.com/AutoMapper/AutoMapper/wiki

【讨论】:

  • 但是保持 EF 功能很重要,比如延迟加载等,所以我希望 EF 类扩展我的域类。就像它首先使用代码完成的方式一样。仅映射值是不够的。我想做的只是将我自己的类用作 POCO 类(如代码优先),而不是 DbContext Generator 生成的类。
  • 然后让你的域类成为 EF 类的部分类?
  • podiluska:好的,谢谢。这可能是实现我正在寻找的东西的好方法。我会查看您的建议以及来自 Ladislav Mrnka 的建议,并在找到解决方案后更新我的帖子。 :)
【解决方案2】:

好的,我找到了解决方案。我做了 Ladislav Mrnka 建议并从 ObjectContext 派生的东西。 这是一个描述如何完成的页面:Entity Framework 4.0 – Part4: How to use your own POCO’s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多