我有一些模型的集合:
class Person
{
public int Id {get;set;}
public int Age {get;set;}
public string Name {get;set;}
}
var collectionModel = new List<Person>{ ... };
和DTO集合:
class PersonDto
{
public int Id {get;set;}
public int Age {get;set;}
public string Name {get;set;}
public int RowNumber {get;set;}
}
var collectionDto = new List<PersonDto>{ ... };
所以,我从repository(数据库)获取collectionModel,我从远程客户端获取collectionD.
有没有一种有效的方法来比较这些集合和“应用更改”(更新已更改的实体,删除不存在并添加新的)在collectionModel上将其保存在数据库中?
一个显而易见的选择 – “手动”比较集合,更新属性,创建和删除对象.但是这段代码变得重复了.
最佳答案 不,那里没有.如果要避免手动映射属性,可以将Person作为DTO传递,然后将其附加到实体框架上下文.在您的存储库中:
protected virtual void Merge(object modified, object attached)
{
if (attached != modified)
DB.Entry(attached).CurrentValues.SetValues(modified);
else
DB.Entry(modified).State = EntityState.Modified;
}
然后插入或更新:
public void UpdateSomething(Something obj)
{
var attached = DB.Somethings.Single(x => x.ID == obj.ID);
Merge(obj, attached);
DB.SaveChanges();
}