将POCO对象树与实体框架

时间:2016-02-21 08:23:34

标签: c# entity-framework orm

让我们假设我正在尝试构建一个三层电话本应用程序,其中以下实体对应于数据库表,相应的DTO对象,它们通过Web服务发送到AngularJS前端,其中用户可以编辑整个电话簿,并通过单击按钮保存/放弃所有编辑(不保存单独的编辑,但整本书)。

所以我的想法是将所有Contacts发送到网络应用,然后用户编辑联系人,详细信息,添加内容,删除内容,然后在保存时将所有数据发送回网络服务。

public class Contact{
   public int Id;
   public string Name;
   public List<PhoneNumber> PhoneNumbers;
   public List<AddressEntry> Addresses;
}

public class PhoneNumber{
   public int Id;
   public string Number;
   public string Type;
}

public class AddressEntry{
   public int Id;
   public string Line1;
   public string Line1;
}

是否有一些合理的方法可以将这个对象树 - List<Contact>或(List<ContactDTO>看起来相同)重新连接到我的数据库上下文,让实体框架找出具有空ID的联系人是应该删除那些丢失的,那些具有修改属性的应该更新?请记住,这些联系人也有子对象。

我不想为每个实体类编写特定的内容,因为实际上我会有大约100个这样的类(它是一个带有许多不同参数表的参数配置工具类型),当前版本有超过10K行代码,重写的重点是让它合理地缩短。

已经尝试过: 我设法生成了一个弱解决方案,我强制我的实体和DTO类实现interface IObjectWithKey { int Id; },然后做一些能够检测添加/删除/更新的通用事物,然后从实体传输数据使用AutoMapper到DTO课程,但是我对孩子列表有困难。

我自己需要写这个吗?会使用NHibernate等其他框架吗?

1 个答案:

答案 0 :(得分:1)

无论是在Entity Framewoinrk还是NHibernate中,如果您以正确的方式配置了类映射,两个框架都将能够检测属性和关联更改。

如果使用AutoMapper将DTO映射到域对象,则此处应该没有问题,因为实体框架更改跟踪只跟踪对象图上的更改,并且它不会关心您如何修改它(即通过设置属性手动或使用AutoMapper等库。