【发布时间】: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