0

イムstackoverflowの中に、新規ユーザーとこれが私の最初の質問ですが、私はすべてのルールを破ることが文句を言わない願っています:)... EF4とUnitOfWorkのパターンと私のMVC3プロジェクトでユニットワークを保存する前にコンテキストからエンティティを取得する方法以前に追加されたエンティティを使用してフィールドを計算するパターン?

新しいエンティティIを追加します新しく追加されたエンティティとデータベースにすでに格納されているエンティティをチェックし、新しいエンティティでカラムを計算する必要があります。

問題は、データベースから値を取得した場合、新たに追加されたエンティティが考慮されないことです。

各エンティティの挿入後にユニットワークを保存してこの問題を解決しました。しかし、これは、特定のエンティティが挿入されるたびにコンテキストの現在の状態を保存することを意味します。

今後これがパフォーマンスの問題を引き起こすかどうかを知りたいと思います。もしそうなら、他の方法で問題を解決することができますか?

public class Group 
    { 
     public Guid GroupId { get; set; } 
     public int Code { get; set; } 

    } 

コントローラー:

 UserGroup Group1 = new Group() 
     { 
      UserGroupId = Guid.NewGuid(), 
      Code = (int)Math.Pow(2, (unitOfWork.GroupRepository.Get().Count())); 
     }; 
     unitOfWork.GroupRepository.Insert(Group1); 


     UserGroup Group2 = new Group() 
     { 
      UserGroupId = Guid.NewGuid(), 
      Code = (int)Math.Pow(2, (unitOfWork.GroupRepository.Get().Count())); 
     }; 
     unitOfWork.GroupRepository.Insert(Group2); 

挿入方法:(ジェネリックリポジトリから派生したすべて送信しないようにここで

は問題(簡体字)

モデルについての相対的なコードです。リポジトリパターン)

public virtual void Insert(Group grouptoadd) 
    { 
     UnitOfWork unitOfWork = new UnitOfWork(Context); 
     dbSet.Add(grouptoadd); 
     unitOfWork.Save(); 
    } 

私はUnitOfWorkをGroupRepositoryクラスのInsertメソッドの中に保存しません。Group2のコードが計算されると、Group1は考慮されません。

insertOptWork内にunitOfWorkを保存する方法が正しくないようです。 (新しく追加されたエンティティ:コンテキストから値を取得しようとしました

(int)Math.Pow(2, (Context.Groups.Count())); 

このコードは常に私がデバッグモードでコンテキスト内のエンティティを参照してくださいしかし、私が必要とする最後で返します0

を数えることができる1を返します。 +データベースに格納されているエンティティ).Count()

+0

あなたは同時実行の問題を期待してくださいか、なぜあなたは 'unitOfWork.GroupRepository.Get()を呼び出しません。'一度だけして、あなたは新しい 'Group'sを追加するループ内でカウントをインクリメント)(カウント?パフォーマンス上の問題の可能性について質問するとき、この手順で通常どのくらいの 'Group'を追加しますか? – Slauma

+0

この手順では少なくとも現在は同時実行可能性はありません。 5-10グループは、いくつかの他のエンティティに応じて手順で追加されます。 – Azadrum

答えて

1

あなたはDbSetのLocalプロパティを使用する場合があります。 DbSetsを使用しない場合は、Why can I not see the property Local when using Entity Framework?の記事を参照してください。

+0

あまりにも明白に述べられた問題を理解するのは素晴らしいことです:) はい、私はEFに挿入されているものの、そのローカルプロパティでデータベースにまだ保存されていないものも含めて、エンティティのリストを取得できます。 – Azadrum

0

異なるコンテキストを使用する必要があります。別のコンテキストを初期化しようとすると動作します。

+0

別の文脈を初期化することが意味するものを理解できませんでした。 あなたはもっと具体的になりますか?私は、これはコンテキストの現在の状態に特定のエンティティがinserted_であることを、すべての時間を節約する意味_butどのようにこれが解決しない概念 – Azadrum

+1

にずっと後ろのmの場合さらなる読書のためのリンクが良いでしょうか?ない。さらに悪いことに:それは問題を統合します。 –

関連する問題