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();
}