私はこの問題をしばらく扱っていますが、解決策を見つけることができないようです。私はEF 4 ObjectContextをラップするいくつかのリポジトリを持っています。以下の例は次のとおりです。Ninject MVC 2 - EF 4 ObjectContextの問題
public class HGGameRepository : IGameRepository, IDisposable
{
private readonly HGEntities _context;
public HGGameRepository(HGEntities context)
{
this._context = context;
}
// methods
public void SaveGame(Game game)
{
if (game.GameID > 0)
{
_context.ObjectStateManager.ChangeObjectState(game, System.Data.EntityState.Modified);
}
else
{
_context.Games.AddObject(game);
}
_context.SaveChanges();
}
public void Dispose()
{
if (this._context != null)
{
this._context.Dispose();
}
}
}
そして私はNinjectModule以下があります。
public class DIModule : NinjectModule
{
public override void Load()
{
this.Bind<HGEntities>().ToSelf();
this.Bind<IArticleRepository>().To<HGArticleRepository>();
this.Bind<IGameRepository>().To<HGGameRepository>();
this.Bind<INewsRepository>().To<HGNewsRepository>();
this.Bind<ErrorController>().ToSelf();
}
}
私はMVC 2の拡張、InRequestScope()
にこれらのバインディングのデフォルトを使用していますので。
私の問題は、ObjectContextが正しく処理されていないことです。私はここで説明しているものを得る:
、それらが異なるのObjectContextのオブジェクトに添付されているので、2つのオブジェクト間の関係を定義することができない。https://stackoverflow.com/a/5275849/399584は具体的には、私が述べてInvalidOperationExceptionがを取得します。
これは、エンティティを更新しようとするたびに発生します。
バインドするように私のリポジトリを設定すると、それはうまくいくように思えますが、InSingletonScope()
のようになります。
私は間違っていますか?
EDIT:分かりやすくするため、リクエストごとにすべてのreposと共有したいObjectContextが1つだけあります。
'InSingletonScope()'の使用には問題ありません。 –
スレッディング/キャッシングはどうですか?正直言って、私はこの状況(PHPから来ています)でどちらがうまく動作するかはわかりません。 –