Я только что начал использовать и Linq to SQL, и контейнер IoC Windsor Castle для нового веб-приложения, и, хотя в предварительных тестах все работает нормально, я мог бы действительно проверить его работоспособность.
У меня возникли проблемы, когда я пытался извлечь объекты из базы данных с помощью Linq в разных частях приложения, а затем обновить их в базе данных. Поскольку они были из разных контекстов данных, я не смог сохранить изменения.
Итак, я создал единый текстовый текст, используемый в приложении - надеюсь, для каждого веб-запроса. - Это разумный способ решить проблему?
Это выглядит так:
public class DataContextAccessor : IDataContextAccessor
{
private readonly DataContext dataContext;
public DataContextAccessor(string connString)
{
dataContext = new DataContext(connString);
}
public DataContext DataContext { get { return dataContext; } }
}
Я использовал Касла, чтобы спровоцировать это так:
<component id="DataContextAccessor" service="DomainModel.Repositories.IDataContextAccessor, DomainModel"
type="DomainModel.Repositories.DataContextAccessor, DomainModel" lifestyle="PerWebRequest">
</component>
Тогда всякий раз, когда я хочу попасть в базу данных в классе, я просто объявляю IDataContext datacontext
в своем конструкторе.
- Будет ли это (как я надеюсь) создавать единый контекст данных для каждого веб-запроса - и не вызовет ли я проблем с гонкой при одновременном поступлении большого числа запросов?