Я добавляю новый контекст данных в каждый из моих репозиториев с помощью StructureMap.Жизненный цикл соответствует HTTP-контексту.Но у меня возникли некоторые проблемы с «ошибками приведения к неверному приведению», которые я сузил до «не уничтожения контекстов данных».См. Мой связанный вопрос .
Где мне распоряжаться моим контекстом данных (классом БД), не изменяя каждый метод чтения / записи?Где бы я ни изменял данные, я использовал новый DB () в using(...)
, поэтому он необходим только для методов IQueryable<xxx> Getxxx(...)
, но некоторые из них взаимозависимы, поэтому я не хочу, чтобы удаление вызывало DataContext disposed
ошибки.
Начальная загрузка:
public class DBServiceRegistry : Registry
{
public DBServiceRegistry()
{
For<DB>().HttpContextScoped().Use(new DB());
}
}
Репозиторий:
Этот контекст данных передается в мои репозитории, которые принимают его так:
public class SqlProductRepository : IProductRepository //, IDisposable
{
private DB _db;
public SqlProductRepository(DB db)
{
_db = db;
}
...
}
Запрос:
public IQueryable<Models.Product> GetProducts()
{
var products =
from p in _db.Products
let images = GetProductImages().WithProductID(p.ProductId)
select new Models.Product
{
ID = p.ProductId,
ProductCode = p.ProductCode,
Name = p.Name,
Description = p.Description,
Price = p.Price,
DateModified = p.Date,
ModelID = p.ModelId,
Images = new LazyList<Models.ProductImage>(images),
EditedBy = p.UserId,
IsTaxable = p.IsTaxable,
Inventory = p.InventoryStatus,
Slug = p.Slug
};
return products;
}
Я попытался сделать SqlProductRepository
IDisposable
, но ошибка не исчезла.Как я могу аккуратно утилизировать мои контексты данных (DB
) без изменения каждого метода (их много)?