Какую сборку я должен поместить скомпилированными представлениями для кода структуры сущности в первую очередь, когда контекст находится в отдельном проекте от классов домена
В отчаянной нужде в помощи.
Сначала я использую код структуры сущностей и пытаюсь следовать предложению Джулии Лерман о выделении контекста из классов домена, и мне не удается получить структуру сущностей для распознавания скомпилированных представлений. Я перепробовал много вещей, но лучше всего то, что я могу получить конструктор скомпилированных представлений для вызова, но для первого запроса это все еще занимает около 15 минут (создано около 329 сущностей и более 600 представлений). Это заставляет меня думать, что все еще приходится создавать представления по 1-му запросу.
меры
Используя существующую базу данных и "Модельный проект", я запустил Entity Power Tools Beta 3 для "Обратный код инженера сначала" базы данных. Это создало контекст, классы предметной области и классы отображения (свободно). К вашему сведению, я делаю это, потому что я немного изменил шаблон T4, чтобы он соответствовал нашему стандарту кодирования.
Используя рекомендации Джули Лерман из ее обучающих видео о сайте Plural Site, я разбил классы доменов, контексты и классы сопоставления на 3 отдельных проекта (контекст, классы доменов, сопоставления). Я скопировал файлы из модельного проекта в эти 3 проекта соответственно, а затем изменил пространство имен в соответствии с именем и местоположением проекта. Результаты и пространства имен для 4 проектов: "MyCompany.DataContext", "MyCompany.DomainClasses", "MyCompany.DomainMappings", "MyCompany.Model".
Используя "проект модели" и код, сгенерированный из Entity Power Tools, я выбрал созданный контекстный файл и нажал правую кнопку мыши, чтобы отобразить контекстное меню, в котором я мог выбрать "Создать представления". Когда я делаю это, это выдает мне ошибку "Последовательность не содержит соответствующий элемент". (Проблема № 1)
Итак, это не сработало, поэтому я добавил шаблон T4 от "Pawel Kadluczka" в проект "MyCompany.DataContext" для генерации представлений и запустил этот пользовательский инструмент и успешно, представления были созданы без ошибок. Однако когда я запускаю тестовое приложение для выполнения базового запроса, первый запрос занимает 15 минут, и конструктор "ViewsForBaseEntitySets1B04A...0F8A()" сгенерированных представлений не вызывается.
Итак, это тоже не сработало, поэтому я добавил файл "views", созданный шаблоном T4, в проект "MyCompany.DomainClasses", чтобы он скомпилировался с классами и снова запустил тестовое приложение. На этот раз 1-й запрос все еще занимал 15 минут, но примерно через 20 секунд после запуска был вызван конструктор "ViewsForBaseEntitySets1B04A...0F8A()". Это прогресс, но не банан. Это заставляет меня думать, что представления должны быть в той же сборке, что и классы домена, а не в контексте. Вопрос: это правильное предположение? Кроме того, так как это все еще занимало 15 минут, было похоже, что Entity Framework видел представления, но не любил их, поэтому он воссоздал их снова. Возможный?
Что теперь? Я в растерянности и бью себя головой об стену. Как мне создать предварительно скомпилированные представления в нескольких контекстах, где у меня разбиты проекты? Куда идут взгляды? Есть ли правило пространства имен, которому я не следую? Что происходит, когда у меня есть 2 или более контекстов?
Пожалуйста помоги. До нашей эры
1 ответ
Решено. Похоже, что независимо от сборки контекста предварительно скомпилированные представления должны быть в той же сборке, что и классы домена.
Кроме того, основной причиной моей проблемы было то, что у меня был другой контекст, который фактически использовался вместо того, который был создан. Я не осознавал, что оба контекста создавались, но 2-й был тем, что на самом деле вызывалось, и, поскольку я не создавал для него скомпилированные представления, это занимало много времени каждый раз, когда запускалось тестовое приложение. Теперь начальный запрос - 18 секунд вместо 15 минут, потому что я использую второй контекст с недавно скомпилированными представлениями.
Теперь у меня есть 2 проекта контекста (MyCompany.Context, MyCompany.SystemContext) и проект MyCompany.DomainClasses, проект MyCompany.Model и проект MyCompany.DomainMappings. Я использую сценарий T4 для генерации представлений в обоих контекстных проектах, и я включил файлы представлений из MyCompany.DomainClasses, используя скопированную ссылку, чтобы при обновлении он также обновлял файл классов доменов. Это позволяет Entity Framework обнаруживать скомпилированные представления, что сокращает время запуска первого запроса.