实体框架:关注点分离

时间:2009-11-09 07:00:27

标签: c# .net entity-framework .net-3.5

我正在使用EF并想知道其他人如何将数据上下文与实体分开。

基本上我需要一个层来访问数据上下文(模型对象)来调用SaveChanges()等..而其他层需要访问实体类型本身。因此,例如,如果一个方法返回一个实体并且我从我的UI调用了该方法,那么我将不得不从UI引用该模型并且这不是很好。

有没有办法让实体类型在一个项目中,并在另一个项目中有数据上下文?

我想另一种方法是为每个实体创建接口,并将接口放在其他层可以引用的另一个项目中。但这是一个很大的维护和痛苦的屁股

2 个答案:

答案 0 :(得分:2)

从您的实体创建一个域模型,它基本上反映了您拥有的字段/属性。这可以是一个完全独立的项目,单独的层。

要在两者之间进行映射 - EF实体和域模型类 - 我会使用像AutoMapper这样的工具来简化两个独立但几乎相同的类之间的分配。

通过这种方式,您可以获得干净,漂亮的分离,并为您节省大量无聊的打字!

答案 1 :(得分:2)

在我看来,虽然这确实是一个痛苦的屁股,但接口是更好的方法。你真的会实现松散耦合。

使用界面,您稍后可以完全更改您的实体层,您的用户界面甚至不会注意到。为此目的创建了接口,清晰的分离和隔离。

人们总是倾向于发现无聊和浪费时间的界面。但是你通过忽略它们来节省时间,你会稍后付款,我告诉你!

Marc_s也给了你一个很好的答案(嘿,那是marc_s!),但在我看来不那么纯粹。
你也可以去POCO实体对象,但是从这里开始耦合。