我正在尝试使用Entity Framework更新实体并将其保存到数据库中。调用更新时,我的服务方法检索DTO,为其分配UI传递给它的实体对象的值,然后将其保存到数据库中。我不想手动分配这些值,而是想使用Automapper,但是当我这样做时,我没有映射的值会更新为null。有没有办法在Entity Framework或Automapper中阻止这种情况?
服务方法查找数据库中的现有对象,为其分配新实体的属性,然后保存:
public void Update(MyEntity updatedEntity, int id)
{
var existingObject = db.tblmyentity.Find(id);
existingObject.name = updatedEntity.name;
existingObject.address = updatedEntity.address;
existingObject.phone = updatedEntity.phone;
db.SaveChanges();
}
但是,UI中无法访问此对象的字段中存储的值,例如谁修改了对象以及何时修改了对象。使用AutoMapper简化此代码(如下所示)会导致这些字段更新为null:
public void Update(MyEntity updatedEntity, int id)
{
var existingObject = db.tblmyentity.Find(id);
Mapper.Map(updatedEntity, existingObject);
db.SaveChanges();
}
答案 0 :(得分:1)
一个好的做法是创建一个(service,api)模型,该模型只包含可以更新的相关属性。 E.g:
public class MyEntityServiceModel
{
public string name { get; set; }
public string address { get; set; }
public string phone { get; set; }
}
// this looks differently in recent versions of AutoMapper, but you get the idea
Mapper.CreateMap<MyEntityServiceModel, MyEntity>();
// your update functions looks the same, except that it receives a service model, not a data model
Update(MyEntityServiceModel updatedEntity, int id)
{
// same code here
}
这种方法具有以下优点:
Update
函数使用者不会意识到您正在使用的数据持久性库。