从对象更新EF

时间:2012-10-26 16:43:39

标签: c# .net entity-framework

我知道更新EF中的对象我可以做类似的事情......

var hotel = context.Hotels.SingleOrDefault(u => u.HotelID == editedHotel.HotelID);
    hotel.Name= editedHotel.Name;
    hotel.Address = editedHotel.Address;
    hotel.RoomCount = editedHotel.RoomCount;
context.SaveChanges();

但如果很多字段需要更新,这会很长。

有没有办法可以做点像......

    var hotel = context.Hotels.SingleOrDefault(u => u.HotelID == editedHotel.HotelID);
hotel = editedHotel;
context.SaveChanges();

...所以所有字段都可以一次更改?

3 个答案:

答案 0 :(得分:3)

我想您可能想要查看类似AutoMapper的内容。

但是,如果您覆盖对hotel的引用,则您实际上已经失去了EF为您执行的跟踪。

答案 1 :(得分:3)

怎么样......

var cachedHotel = context.Hotels.Local
    .FirstOrDefault(h => h.id = editedHotel.id);
if (cachedHotel != null)
{
  context.Hotels.Detach(cachedHotel);
}
context.Hotels.Attach(editedHotel);
context.Entry(editedHotel).State = System.Data.EntityState.Modified;
context.SaveChanges();

答案 2 :(得分:1)

您可以使用/编写使用反射的克隆方法将值从一个对象应用到另一个对象。

或者您可以在酒店类中添加一个方法来获取酒店对象并应用这些值,例如:

public void Apply(Hotel h)
{
    this.Name = h.Name;
    this.Address = h.Address;
    this.RoomCount = h.RoomCount;
}

然后您的代码变为:

var hotel = context.Hotels.SingleOrDefault(u => u.HotelID == editedHotel.HotelID);
    hotel.Apply(editedHotel);
context.SaveChanges();