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