私は数年前からEntityFrameworkを使用していますが、今は少し問題があります。
テーブルにエンティティを追加します。
Entities.dbContext.MyTable.Add(obj1);
そしてここで大丈夫。
次に、MyTableで次のようなクエリを実行します。
Entities.dbContext.MyTable.Where(.....)
上記のコードは、データベース内のMyTableに対してクエリを実行します。
saveChangesの前に、付加価値だけでクエリを実行する方法はありますか? (obj1)どうやって?
[〜#〜]更新[〜#〜]
なぜこれが必要なのですか?追加する新しい要素ごとに、前のレコードと次のレコードのいくつかの値を編集する必要があるためです(このテーブルには日時フィールドがあります)
UPDATE2
多くのオブジェクトを追加する必要があるとしましょう。ただし、最後のアイテムが追加された後でのみsaveChangesを呼び出します。新しいアイテムを追加するたびに、その日時フィールドを読み取り、データベースで前のレコードと次のレコードを検索します。ここでは、前のレコードと次のレコードのフィールドを編集します。ここで問題があります。たとえば、次のアイテムが「Obj1」の場合、別のアイテムを挿入すると、それを見つけて編集する必要がありますが、変更を保存していないため、見つけることができません。今はもっとはっきりしていますか?
次のような変更トラッカーを使用して、追加したエンティティをdbContextから取得できるはずです。
var addedEntities = dbContext.ChangeTracker.Entries()
.Where(x => x.State == EntityState.Added && x.Entity.GetType().Name == "MyTable")
.Select(x => x.Entity as MyTable);
追加されたエンティティのみをクエリしているため、これをと組み合わせることができます
dbContext.MyTable.Where(x => -criteria-).ToList().AddRange(addedEntities);
関連するすべてのオブジェクトを取得するには
これはトランザクションにとって良い状況だと思います。バージョンを提供しなかったため、EF6を使用していると想定します。 =)
UPDATE2の変更
public void BulkInsertObj(List<TEntity> objList)
{
using (var context = new dbContext())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
foreach(var obj1 in objList)
{
dbContext.MyTable.Add(obj1);
//obj1 should be on the context now
var previousEntity = dbContext.MyTable.Where(.....) //However you determine this
previousEntity.field = something
var nextEntity = dbContext.MyTable.Where(.....) //However you determine this
nextEntity.field = somethingElse
}
context.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
}
}