個別に回答できる質問が 2 つあります。
Q#1
データベース サーバーへのラウンド トリップを保存しようとしています。
ここに私のアルゴリズムがあります:
- 2 つのエンティティを挿入します (データベースによって生成された ID を取得するため)
- 返された ID を使用して、ID を渡すストアド プロシージャを呼び出します。
ストアド プロシージャは ID を取得し、有向非巡回グラフを格納するために使用している隣接リスト テーブルに値を設定します。
現在、親子関係ごとにRDBMSへの往復と、エンティティの挿入用の往復があります。
私は次のようなことをすることが知られています:
public override int SaveChanges()
{
foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == System.Data.EntityState.Added).ToList())
{
if (entry.Entity is IRobot)
{
entry.Reference("Owner").CurrentValue = skyNet;
}
}
return base.SaveChanges();
}
したがって、次のコードのように行われた「ADD」に対してEntityState.Addedを検出できる方法があるかどうか疑問に思っていました。
var robot = new Robot();
skyNet.Robots.Add(robot);
db.Add(skyNet);
db.SaveChanges();
次のようなことができるように: (これは疑似コードであることに注意してください)
public override int SaveChanges()
{
foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == EntityState.**AddedToCollection**).ToList())
{
db.Relate(parent: skyNet, child: entry.Entity);
}
return base.SaveChanges();
}
Q#2
SaveChanges() を呼び出した後、データベースへの同じ「トリップ」の一部としてストアド プロシージャを呼び出す方法はありますか?