Я реализовал простой шаблон хранилища для Entity Framework в веб-приложении.
У меня есть несколько репозиториев, которые все подклассируют базу, которая имеет некоторые общие методы в
База выглядела так
public class BaseRepository<TEntity> : IRepository<TEntity>
{
protected readonly RedirectsEntities Context;
public BaseRepository()
{
Context = new RedirectsEntities();
}
(RedirectsEntities - это текстовый текст EF, или как он там называется)
И у меня был RuleRepository и SiteRepository, который его подклассил
Однако это вызвало у меня проблемы при поиске сайта и использовании этого значения для сохранения в правиле
ошибка была
"ADO.Net Entity Framework На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker"
Предположительно, потому что каждый репозиторий имеет свой экземпляр RedirectsEntities?
Итак, я нашел этот вопрос:
ADO.Net Entity Framework На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker
, который предлагает переместить текст данных в отдельный класс, держа его в статической переменной
, например
public class DataContext
{
private static RedirectsEntities _dbEntities;
public static RedirectsEntities DbEntities
{
get
{
if (_dbEntities == null)
{
_dbEntities = new RedirectsEntities();
}
return _dbEntities;
}
set { _dbEntities = value; }
}
}
и тогда мой базовый конструктор хранилища будет выглядеть так:
public BaseRepository()
{
Context = DataContext.DbEntities;
}
Так что, похоже, это решило мою проблему, но я обеспокоен тем, что область действия RedirectsEntities теперь неверна.
Может кто-нибудь прокомментировать это?