Занят работой над существующим веб-приложением и обеспокоены безопасностью потоков объекта ObjectContext, используемого в классе BaseRepository. Код, который вызывает у меня чувство пауков:
// within base repository
private SiteDataContext context;
public SitepDataContext Context
{
get
{
if (context == null)
context = new SiteDataContext();
return context;
}
}
// inherited repository
public class InheritedRepository1 : BaseRepository
{
public SomeEntity Get()
{
var something = Context.SomeEntity.First();
}
}
public class InheritedRepository2 : BaseRepository
{
public SomeOtherEntity Get()
{
var something = Context.SomeOtherEntity.First();
}
}
Насколько я понимаю:
- ObjectContext является не поточно-безопасным и в этом случае может использоваться несколькими потоками.
- В запросе http должен использоваться один объектный текст. Для отображения страницы создается несколько объектных контекстов из различных репозиториев.
- Объектный контекст, кажется, не закрыт, удален в любой точке http-запроса. Это может быть проблемой, если транзакции используются, и транзакции фиксируются из потоков, которые не начали их.
Буду признателен за любые отзывы о эти 3 пункта выше , так как мой опыт в основном основан на NHibernate.