Пожалуйста, проверьте исправность Linq to SQL и Castle IoC. - PullRequest
2 голосов
/ 02 октября 2009

Я только что начал использовать и 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 в своем конструкторе.

  • Будет ли это (как я надеюсь) создавать единый контекст данных для каждого веб-запроса - и не вызовет ли я проблем с гонкой при одновременном поступлении большого числа запросов?

1 Ответ

1 голос
/ 02 октября 2009

Проблема, которую я вижу, у вас возникнет, если ваш интерфейс IDataContextAccessor предоставляет свойство DataContext следующим образом:

public interface IDataContextAccessor{
  DataContext DataContext{get;}
}

Проблема в том, что вы фактически тесно связали свой интерфейс с DataContext, созданным с помощью linq, что означает, что макетирование и модульное тестирование практически невозможно.

...