私はVisual Studio 2012とEntity Framework 6.0を使用していますが、いくつかのCRUD
操作を行っていますが、今は直面する課題があります。
私は1つのフォームで複数のエントリを実行していて、これらの詳細を一度に更新または保存したいので、今のようにしています:
オブジェクトとストアの値を作成し、1つずつアタッチして追加/更新し 、変更を保存します。
しかし、私はクラスの複数のオブジェクトをアタッチするようにして、最後にはforループの後にsavechanges
を行うことができますかsavechanges
複数のオブジェクトをアタッチして複数のsavechanges
を保存するsavechanges
していますか?
例:
for(int i=0; i < comingrequestdata.Count(); i++)
{
ObjectExample obj = new ObjectExampole();
obj.Value1 = comingrequestdata[i].Value1;
obj.Value2 = comingrequestdata[i].Value2;
obj.Value3 = comingrequestdata[i].Value3;
context.ObjectExamples.Attach(obj);
}
context.SaveChanges();
このようにすることはできますか?私はちょっと混乱しています。ある人が私を助けてください。
新しい項目を追加したり、変更された項目を更新するのは、ただ一つのメソッドを呼び出すだけでは簡単ではありません。新しいアイテムを追加するときと更新するときを区別する必要があります。しかし、はい、複数のアイテムを提出して、新しいものとして更新または追加することができます。たとえば、このメソッドは、エンティティの追加と更新の両方を行うのに役立ちます。
public SomeEntity AddOrUpdate(SomeEntity item)
{
var original = _context.SomeDbSet.Local.FirstOrDefault(p => p.Id == item.Id)
?? _context.SomeDbSet.FirstOrDefault(p => p.Id == item.Id);
if (original != null) // Updating
{
var entry = _context.Entry(original);
entry.CurrentValues.SetValues(item);
}
else
{
// New item
item = _context.SomeDbSet.Add(item);
}
return item;
}
このメソッドをいくつか呼び出した後、 DbContext
ベースのオブジェクトにSaveChanges
を呼び出します。
お返事ありがとうございました。私はこのようなsomehingをしました。テーブルのオブジェクトを作成します。
EntityFrameworkEntities db = new EntityFrameworkEntities();
Classname obj = new Classname();
obj.updatefirstvalue = something;
obj.updatesecondvalue = something;
db.Entry(obj).State = EntityState.Modified;
db.SaveChanges();
それでおしまい。また、最後にsavechangesで更新したいクラスを追加することもできます:
foreach(var item in collection){
Classname obj = new Classname();
obj1.updatefirstvalue = item.something;
obj1.updatesecondvalue = item.something;
db.Entry(obj).State = EntityState.Modified;
}
db.SaveChanges();