我知道更新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();
...所以所有字段都可以一次更改?
答案 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();