通过WCF在EntityFramework中保存对象会导致创建相关实体

时间:2011-05-19 10:51:32

标签: wcf entity-framework

在目前这个项目中,开发人员遇到过同样的问题:

具有相关实体的对象,即具有相关客户的订单,通过WCF发送回实体工作以进行保存。如果对象是新的,我们使用AddObject()将它放回上下文中,如果它已经改变,那么我们使用ApplyCurrentValues()来更新对象。

Order对象已更改,但Customer对象没有更改(除非通过WCF的流以某种方式影响它)。但是,在上下文中调用SaveChanges()时,将保存主对象(本示例中为Order),但也会将新的Customer副本添加到数据库中。

我们发现的解决方法是在调用SaveChanges()之前将对Order on Order的引用设置为null,但这感觉就像是一个kludge。

我正在寻找的是解决此问题的“正确”方法,类似于LazySaving = false,即只保存更改的对象,不要尝试创建所有相关对象。

提前感谢任何指示。

1 个答案:

答案 0 :(得分:0)

我不确定Entity Framework,但最近我遇到了NHibernate这个问题。我通过实现以下方法解决了这个问题

(1)从DB中检索原始实体 (2)使用AutoMapper从WCF数据传输对象更新原始实体 (3)保存原始实体

我不确定您是否尝试将您的实体用作DataContracts,根据我的经验,使用数据传输对象而不是DataContract实体总是更好。如果你不这样做,你会不断遇到各种各样的麻烦,DTO + AutoMapper可以让你控制解决你遇到的大多数问题

http://automapper.codeplex.com/