0

stackoverflowの新しいユーザーです。これが私の最初の質問です。ルールに違反しないことを願っています:)...

EF4とUnitOfWorkパターンを使用したMVC3プロジェクトでは、

新しいエンティティを追加するときは、新しく追加されたエンティティとデータベースにすでに保存されているエンティティを確認し、新しいエンティティの列を計算する必要があります。

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

各エンティティを挿入した後、作業単位を保存することで問題を解決します。ただし、これは、特定のエンティティが挿入されるたびに、コンテキストの現在の状態を保存することを意味します。

これにより、将来的にパフォーマンスの問題が発生するかどうかを知りたいと思います。もしそうなら、問題を解決する他の方法はありますか?

これが問題に関する相対的なコードです(簡略化)

モデル :

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が考慮されません。

unitOfWorkをinsertメソッド内に保存するのは正しくないようです。コンテキストから値を取得しようとしました

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

このコードは常に1を返します。デバッグモードでコンテキスト内のエンティティを確認できましたが、Countは0を返します。

最後に私は必要です:(新しく追加されたエンティティ+データベースに保存されたエンティティ).Count()

4

2 に答える 2

1

DbSetのLocalプロパティを使用することをお勧めします。記事を参照してくださいEntityFrameworkを使用しているときにプロパティLocalが表示されないのはなぜですか?DbSetsを使用しない場合。

于 2012-04-19T13:35:32.627 に答える
0

別のコンテキストを使用する必要があります。動作するときに別のコンテキストを初期化してみてください。

于 2012-04-05T11:23:14.513 に答える