将DDD类映射到从Entity Framework 4.0生成的数据库模型

时间:2011-05-10 06:05:58

标签: database-design entity-framework-4 domain-driven-design

我想知道是否有人可以帮我解决我目前遇到的这个问题。

基本上,我有一个我必须处理的遗留数据库。我创建了一些域类来表示我们的db模型。但是,域类不是与数据库表的直接一对一映射。

这是遗留数据库模型的快照:

enter image description here

我的一个域类是这样的:

public class Reading
{
    public Location Location {get; set;}
}

public class Location
{
    public string Name { get; set;}
}

鉴于上述模型和域类,我该如何映射它们?

我发现的大多数文章都有一对一的映射。

如果你们中的任何人能够提供一些帮助,那将非常感激。

提前致谢。

3 个答案:

答案 0 :(得分:1)

EF支持“每种类型的表”(一对一映射),“每个层次结构的表”, “每个具体类型的表”,“表分裂”(进入多个实体)和 “实体拆分”(进入多个表)。

您的阅读表似乎适合每种具体类型的表格。

每种地图类型都可以在Google中轻松找到。 - 搜索“实体框架”“每种具体类型的表格”。

答案 1 :(得分:0)

您可以使用AutoMapper并编写自定义值解析器来映射和聚合对象。

有关自定义操作解析程序的信息,请参阅http://automapper.codeplex.com,更具体地说,http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers

答案 2 :(得分:0)

您无法直接通过Entity Framework映射它们,因为您在域模型中的类不是实体(确定您可以,但如果位置Name不唯一,则可能会产生不良后果)。第一个问题是您的实体必须映射主键并且主键必须是唯一的(我绝对不确定Reading实体应该表示什么。)

大多数文章描述了整个表的映射,因为这是使用EF的最简单方法。实际上只在EDMX中映射部分表数据意味着手动编写EDMX XML,这是a **的痛苦。您可以使用EF 4.1和流畅的api(没有EDMX)来解决这个问题。如果您只想映射部分数据并且仍然能够插入新记录的非映射列,那么它的表必须是可为空的。