ExperimentEntity Framework 4.0 を使用して、SQL Server データベースにnew を挿入するとします。
Experimentその中に 1..*Tasksがあります- との両方
ExperimentからTask派生EntityObject - また、それぞれにリンクされた
Task「親」が 1 つだけ必要であるというデータベースの制約があります。Experiment
挿入はアトミックでなければなりません。アトミックとは、データベースのリーダーがデータベースExperimentに完全に書き込まれていないもの、たとえばExperimentwith noを読み取ってはならないということTaskです。
これまでに試したすべてのソリューションには、数秒しか続かないにもかかわらず、一部の不完全な実験を読み取ることができるという問題があります。つまり、実験は最終的にそのタスクを迅速に取り込まれますが、原子的にではありません。
すなわち、
- 私のreader.exeは、
while(true)すべての実験をループで読み取り、タスクのない実験をダンプします。 - 並行して
writer.exe、すべて 1 つのタスクで ~1000 の実験を 1 つずつ書き、データベースに保存します。
不完全な実験を読まないようにReadAllExperimentsand関数を書く方法を見つけることができません。WriteOneExperiment
どうすればいいですか?
PS:
私はデータベースの初心者です。書き込み時にシリアル化可能な分離レベルでトランザクションを試したり、UPDLOCK を使用して読み取りを手動で SQL 要求したりしましたが、この問題の解決に成功しなかったため、行き詰まっています。
私が非常に基本的で簡単なニーズだと思っていたものが、不適切な問題であることが明らかになるでしょうか?
問題はここで単体テストされます: Entity Framework Code First: SaveChanges はアトミックではありません