複数のリポジトリ間で 4 つの DbSet を持つ単純な DbContext を共有しようとしています。各リポジトリはこの基本クラスから継承しています
public class CodeFirstRepository : IDisposable
{
private static MyContext _ctx = new MyContext();
protected MyContext Context
{
get { return _ctx; }
}
public void Dispose()
{
if (Context != null)
{
Context.Dispose();
}
}
}
質問: これはリポジトリ間の接続を共有する適切な方法ですか?
さまざまなリポジトリにアクセスすると、単体テストで断続的なエラーが発生します。リポジトリ メソッド GetEntityByName から例外がスローされる
public IOfferResult GetEntityByName(string name)
{
return Context.Entities.Where(o => o.Name == name).FirstOrDefault()
}
テスト メソッド Tests.Service.TestDelete が例外をスローしました: System.ObjectDisposedException: ObjectContext インスタンスが破棄されたため、接続を必要とする操作には使用できなくなりました。
データベースが既に存在する場合、コードは期待どおりに実行されます。GetEntityByName(string name) の実装を次の非パフォーマンス コードに変更した場合にも機能します
public IOfferResult GetEntityByName(string name)
{
foreach (OfferResult offer in Context.Offers)
{
if (offerName.ToLower() == offer.Name.ToLower())
{
return offer;
}
}
}
質問: ここで何が起こっているのですか?
テストを実行したときにデータベースが存在する場合、エラーはまったく発生しないことに注意してください。
ティア、jt