19

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

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

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception


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

+0

Плохо, что вам нужно сначала использовать как первую модель, так и код ... – Serdar

+1

@Serdar - Не обязательно. Он может захотеть начать генерировать код из известной модели, но затем с этой точки вперед сначала начните использовать код, чтобы написать новый код. –

+0

Я только что получил это :) извините ... – Serdar

ответ

23

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

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

+0

Ваш ответ мне помог. И я помещаю вашу ссылку в свой вопрос/ответ @ http://stackoverflow.com/questions/18674079/ef-5-0-database-first-model-not-working-on-one-table/18675388#18675388 Спасибо – HGMamaci

+0

@HGM Рад, что вы нашли этот ответ полезным. –

12

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

<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> 
+0

Привет, Джон, спасибо. Ваш ответ сработал для меня. –

+0

, если вы переключите connectionString из источника данных (localdb) в источник данных SQL, используйте это решение. Если вы теперь предоставляете фактическое имя сервера для своего источника данных, это решение - путь. –

0

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