EF6, Code-First, enable-migrations, "Невозможно загрузить указанный ресурс метаданных",
Я создал библиотеку классов С# с 3 классами сущностей и DbContext для базы данных первого поколения кода. Все прошло хорошо с версией 1. Я создал отдельную тестовую библиотеку, и библиотека классов с классом DbContext вела себя как ожидалось.
Теперь я хотел сделать одно из полей обязательным и следовать кодовым первым соглашениям, я добавил атрибут [Обязательный] к свойству в классе сущности. Следующим шагом было включение миграции.
Я пошел в консоль диспетчера пакетов, ввел "enable-migrations" и... bang... " Не удалось загрузить указанный ресурс метаданных.
Для справки мой класс DbContext включает в себя:
public OrganisationsContext()
: base("Leegz_Entities_Organisations")
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public DbSet<Organisation> Organisations { get; set; }
public DbSet<Member> Members { get; set; }
public DbSet<LeegzUser> LeegzUsers { get; set; }
и мой app.config содержит:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="Leegz_Entities_Organisations" connectionString="data source=NEIL-INSPIRON\NEILDEV;initial catalog=TheLeegz;integrated security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="Leegz.Entities.Organisations.DbSecuritySchema" value="Leegz.Entities.Organisations"/>
</appSettings>
</configuration>
Я видел несколько потоков на эту тему, но все они, похоже, говорят об ошибках в ссылочных элементах файла модели EDMX. Однако, поскольку я использовал код сначала, у меня нет модели (возможно, мне не хватает шага здесь), поэтому совет, который я видел по отношению к информации EDMX в строке соединения, не кажется обратиться ко мне.
Любые идеи, пожалуйста?
Ответы
Ответ 1
- Если у вас есть несколько проектов в решении, убедитесь, что в окне консоли диспетчера пакетов вы выбрали проект с помощью dbContext.
- Миграции используют connectionString с именем, равным классу DbContext. В вашем случае это OrganisationsContext, но не Leegz_Entities_Organisations.
Ответ 2
У меня была аналогичная проблема, но с другим результатом. Потребовалось слишком много часов для отладки, вот несколько советов.
- "Невозможно загрузить указанный ресурс метаданных". ошибка связана с вашими строками подключения.
- Начните с проверки строки подключения в вашем проекте, где у вас есть все ваши объекты.
- Убедитесь, что строка подключения используется для подхода Code First, а не для подхода Первая модель или База данных первой (см. ниже, например).
- Повторите эти шаги в all проектах в своем решении, где у вас есть строка подключения, связанная с вашим DbContext.
- Затем повторите команду
Enable-Migrations
, и она должна работать правильно.
Пример примера первой строки подключения:
<add name="MyContext"
connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=MY_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
Пример строки первого примера кода:
<add name="MyContext"
connectionString="Data Source=.;Initial Catalog=MY_DB;Integrated Security=True;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient"/>