c# – 通过收集DTO来检测模型集合的变化

我有一些模型的集合:

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();
}
点赞