1

私は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();

...すべてのフィールドを一度に変更できますか?

4

3 に答える 3

3

AutoMapper のようなものを調べたいと思うかもしれません。

ただし、 への参照をオーバーライドするとhotel、EF による追跡が事実上失われます。

于 2012-10-26T16:47:15.007 に答える
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();
于 2012-10-26T16:51:20.110 に答える
1

リフレクションを使用してあるオブジェクトの値を別のオブジェクトに適用するクローンメソッドを使用/作成できます。

または、次のように、ホテル オブジェクトを取得して値を適用するメソッドを Hotel クラスに追加することもできます。

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();
于 2012-10-26T16:47:58.750 に答える