2

MVC3プロジェクトでEF4.1を使用していますが、オブジェクトの挿入に問題があります。私はいくつかのオブジェクトを保持するためにセッションも使用しています。具体的には:

親子関係のある単純なクラスがあります。

public class Event
{
    public User Promotor {get;set;}
}

プロモーターはCurrentUserに基づいています。私のアプリケーションでは、CurrentUserをhttpセッションに保存します。このようなイベントを追加すると、ユーザー(および関連するすべてのオブジェクト)が新しい主キーでもう一度挿入されます。

        //1st request inserts/loads the user
        User user;
        using (var context = new MyDbContext())
        {
            user = new User();
            context.Users.Add(user);
            context.SaveChanges();
        }

        //2nd request saves the event 
        var before = db.Users.Count();
        var @event = new Event
        {
            Promotor = user, //user was kept in Session
        };
        db.Entry(@event).State = EntityState.Added;
        db.SaveChanges();

ユーザーの状態を確認すると、主キーは0ではなく、EFはそれがすでに永続的であることを認識しているはずですが、「追加」されています。永続性コードに多くを追加せずにこれを修正するにはどうすればよいですか。リクエストごとに、currentuserを新しいdbcontextに再接続する必要がありますか?これにより、dbコードがアプリケーションに「リーク」します。DBのものをデータ層に保持したい。私はこのようなリポジトリを使用しています:

    public void Save(T entity)
    {
        dbContext.Entry(entity).State = IsPersistent(entity) ? 
            EntityState.Modified : EntityState.Added;
        dbContext.SaveChanges();
    }
4

1 に答える 1

0

すでに述べたように、ユーザーを現在のコンテキストに再接続すると、問題が解決するはずです。私が知っている他の唯一の方法は、主キーの値に基づいて、コンテキスト内でオブジェクトをもう一度取得することです。

于 2011-07-24T10:11:39.613 に答える