Подтвердить что ты не робот

Сначала код или база данных

Я создал модель Entity Framework на основе существующей базы данных, а затем сгенерировал объекты POCO из модели. Строка подключения в моем web.config не является Entity Framework, это просто стандартная строка соединения (она не имеет ссылок на CSDL, SSDL, MSL).

Я могу скомпилировать свое приложение, но когда я запустил, я получаю эту ошибку:

Код, сгенерированный с использованием шаблонов T4 для базы данных First и Model Первая разработка может работать некорректно, если используется в режиме Code First. Чтобы продолжить использование базы данных First или Model First, убедитесь, что Entity Строка подключения к серверу указывается в файле конфигурации выполнение приложения. Чтобы использовать эти классы, которые были сгенерированы из Сначала база данных или модель, с кодом Сначала добавьте дополнительные конфигурации с использованием атрибутов или API DbModelBuilder, а затем удалите код, который генерирует это исключение.


Мой вопрос в том, где в моем коде он понимает, что POCO пришли из автогенерации и как я могу заставить его вести себя как Code First? Я не хочу ссылаться на CSDL и т.д. В моей строке подключения.

4b9b3361

Ответ 1

Если строка подключения содержит метаданные, EF считает, что это First Model или First Database. Если это простая строка соединения, EF думает, что это Code First. Однако, если вы хотите сначала начать делать модель, а сделать EF, вы действительно делаете код сначала (это то, что вы делаете), убедитесь, что вы используете генератор кода DbContext, а не по умолчанию. Первый код кода POCOs - это "простые старые объекты С#" - никакой специальной базы данных не известно или вообще не отслеживает материал отслеживания. Чтобы использовать генератор кода DbContext, щелкните правой кнопкой мыши на диаграмме модели и выберите "Добавить новый элемент генерации кода...", затем выберите ADO.NET DbContext Generator. Кроме того, в зависимости от того, как вы назвали ваши первичные и внешние ключи и/или они сложнее, чем просто простые идентификаторы int, вам, вероятно, потребуется заполнить некоторый код, чтобы сопоставить отношения между вашими объектами в методе "OnModelCreating" в вашем контекст. Удалите строку throw new UnintendedCodeFirstException(); и замените ее кодом отображения. В противном случае EF может оказаться не в состоянии выяснить все отношения (помните, что метаданные для него не зависят).

Надеюсь, что это поможет.

Ответ 2

В файле конфигурации вам нужно следующее:

<connectionStrings>
<add name="<The name of your class>" 
     connectionString="metadata=res://*/<test>.csdl|res://*/<test>.ssdl|res://*/<test>.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=<your source>;initial catalog=<your db>;persist security info=True;user id=<your user id>;password=<your password>;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />
</connectionStrings>

Ответ 3

Сначала я использую базу данных и разрешаю это, скопировав строку подключения, созданную EDMX, в app.config моего загрузочного приложения. Один уже существовал, но, по-видимому, они были другими