Linq-to-SQL и Entity Framework в одном проекте?

В настоящее время я пытаюсь реализовать разделение проблем, используя подход DDD в веб-приложении.

Я хочу иметь возможность реализовать модульное тестирование, поэтому ключевыми факторами являются слабая связь моего пользовательского интерфейса, уровня обслуживания и уровня репозитория.

Я решил, что хочу использовать Entity Framework для уровня репозитория, поскольку это позволит мне разделить контексты и сущности моего домена.

В настоящее время мы используем Linq-to-SQL в веб-приложении.

Есть ли какие-либо серьезные недостатки или красные флажки, которые мне нужно учитывать, прежде чем помещать EF и L2S в одно и то же веб-приложение? Или до того, как использовать этот подход вообще, если на то пошло?

Намерение состоит в том, чтобы использовать EF в дальнейшем и медленно переносить код по мере того, как мы его касаемся, разбивая вещи на их правильные контексты домена.




Ответы (1)


Вы можете без проблем использовать оба ORM в одном проекте. Однако есть несколько вещей, которые могут упростить эту задачу.

  • Используйте одну строку подключения. По умолчанию Linq-to-Sql создает запись строки подключения в файле конфигурации приложения с очень длинным именем, например LinqToSql.Properties.Settings.MyDataContextConnectionString. Я бы удалил эту строку подключения и использовал ее для EF. Вам нужно будет создать экземпляры DataContext с помощью конструктора, который принимает параметр строки подключения:

    var connString = ConfigurationManager.ConnectionStrings["MyDbContext"].ConnectionString;
    using (var db = new MyDataContext(connString))
    {
        ...
    }
    

    Конечно, это проще поместить в фабрику контекста.

  • Используйте чистые пространства имен. Особенно в сценарии перехода Linq-to-Sql и EF могут (временно) использовать одни и те же имена классов (либо сгенерированные, либо созданные вами, если вы работаете с кодом). Это очень удобно, если вы легко можете распознать нужные классы в intellisense.

  • В качестве альтернативы вы можете рассмотреть возможность сохранения кода Linq-to-Sql и EF в отдельных проектах.

person Gert Arnold    schedule 03.02.2016