让我们假设我正在尝试构建一个三层电话本应用程序,其中以下实体对应于数据库表,相应的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等其他框架吗?
答案 0 :(得分:1)
无论是在Entity Framewoinrk还是NHibernate中,如果您以正确的方式配置了类映射,两个框架都将能够检测属性和关联更改。
如果使用AutoMapper将DTO映射到域对象,则此处应该没有问题,因为实体框架更改跟踪只跟踪对象图上的更改,并且它不会关心您如何修改它(即通过设置属性手动或使用AutoMapper等库。