EF エンティティ モデルのエンティティセット インスタンス間の関係を理解しようとしています (モデルはエンティティ デザイナーによって作成されました)。基本的に、エンティティの Repository クラスの 2 つのインスタンスを持つ 1 つの論理トランザクションになります。1 つのインスタンスで正常にコミットされた (SQLServer への直接 SSMS クエリによって確認された) データは、他のインスタンスには表示されません。おおまかな流れはこうです。
ARepository _aR = new ARepository();
A a = _aR.Find(id); //Find does something like: return db.ASet.Where(x => x.id == id);
b.BeginAcctBal = a.AcctBal;
brepo.AddTxn(params ... n); //Creates and saves n txns, and creates its own ARepository instance that updates its instance of AcctBal, which I can see happening in the DB)
A a = _aR.Find(id); //The hope is this gets the updated AcctBal after committed by AddTxn, but it doesn't).
b.EndAcctBal = a.AcctBal; // Still contains the starting balance value.
AddTxn の直後に配置ARepository _aR = new ARepository();
すると、後続のコードは AddTxn 後の AcctBal 値を実際に取得します。
質問:
db.ASet.Where(x => x.id == id);
データベースからリロードしないのはなぜですか? _aR インスタンスが作成されたときから、本当に常にスナップショットから読み取っていますか?
_aR がスナップショットの場合、それをリロードする方法はありますか?
_aR がスナップショットの場合、トランザクションの整合性はどのように維持されますか? より具体的には、それを維持するために何かをする必要がありますか?それとも EF と MVC 1.0 の組み合わせは、このトランザクションの魔法を私のために行いますか?