2016-07-12 11 views
1

ルームモデル更新リスト - エンティティフレームワーク

public class Room 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 

Idがここ

エンティティフレームワークのように主キーで、すべての部屋の詳細はdbcontextである

dbContext.Rooms 

客室数が少なくても更新された名前と住所のリストを持つIList<Room> updateRoomsがあります。

updateRoomsの一致するアイテムのdbContext.Roomsを、プライマリキーIdを使用して更新し、エンティティフレームワークを使用してDBに保存するにはどうすればよいですか。

注:は私がdbContext.Roomsの各ルームを更新し、以下のように

foreach (var room in updateRooms) 
{ 
    dbContext.Rooms.Attach(room); 
    dbContext.Entry(room).State = EntityState.Modified; 
    dbContext.SaveChanges(); 
} 

を保存して、すべての客室を添付方法があると

+0

dbContext.Rooms.AddRange(updateRooms); dbContext.SaveChanges(); –

+0

@KrishnanduSarkarは一致するレコードだけを更新するのではなく、新しいレコードを挿入しますか? –

+0

IList updateRoomsにIDが埋め込まれている場合はレコードを更新し、それ以外の場合は挿入します。 IList にIDがない場合、上記の解決策は機能しません。 –

答えて

2

+1

updateRooms.ToList()。ForEach(room => dbContext.Entry(room).State = EntityState.Modified); dbContext.SaveChanges(); –

-1
foreach(var item in updateRooms) 
{ 
var oldModel= dbContext.Rooms.First(a => a.Id == item.Id); 
if(oldModel !=null) 
{ 
    oldModel.Name = item.Name; 
    oldModel.Address = item.Address; 
    dbContext.SaveChanges(); 
} 
一度に保存することができますことを理解しません

}

お試しください。

+0

これは動作します...試してみてください –

-1

すべてを削除してそれらのオブジェクトを挿入するだけです。あなたはまた、これを使用する別のawswer

foreach (var room in updateRooms) 
    { 
     dbContext.Entry(room).State = EntityState.Modified; 
    } 
    dbContext.SaveChanges(); 

については

var deleteItems = dbContext.Rooms.Where(w => updateRooms.Select(s => s.Id).Contains(w.Id)); 
dbContext.Rooms.RemoveRange(deleteItems); 
dbContext.Rooms.AddRange(updateRooms); 
dbContext.SaveChanges(); 
+0

私はそれが良い解決策だとは思いません。そのIDは主キーとなり、他の場所で参照される可能性があるためです。したがって、それらを削除して再度挿入すると、同じIDが生成されることはありません。その場合、異常が発生する可能性があります。 –

0

まず、すべてのエントリをId(主キー)で検索し、値を更新する必要があります。その後、SaveChanges()メソッドを呼び出します。

foreach (var room in updateRooms) 
{ 
    var roomToUpdate = dbContext.Rooms.Find(room.Id); 
    roomToUpdate.Name = room.Name; 
    roomToUpdate.Address = room.Address; 
} 
dbContext.SaveChanges(); 
関連する問題