Как вы автоматически генерируете SDF в подходе Code First

Я создал POCO и контекст и добавил EF в свой проект из NuGet (v4.3.1). app.config выглядит для меня немного новым по сравнению с тем, к чему я привык. Там есть этот раздел:

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <!--<parameter value="Data Source=|DataDirectory|Test.sdf; Integrated Security=True; MultipleActiveResultSets=True" />-->
  </parameters>
</defaultConnectionFactory>

I've commented out the 'parameter' and add a connection string snippet instead like this under the tag at the top:

<connectionStrings>
  <add name="CodeFirstExampleContext" connectionString="Data Source=|DataDirectory|Test.sdf;Initial Catalog=CodeFirstExample;integrated security=True" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

Раньше с такой строкой подключения база данных SQL CE создавалась автоматически. однако сейчас он этого не делает. Вместо этого я получаю следующее исключение:

«Произошла ошибка при получении информации о поставщике из базы данных. Это может быть вызвано тем, что Entity Framework использует неверную строку подключения. Подробные сведения см. во внутренних исключениях и убедитесь, что строка подключения верна».

Внутреннее исключение:

«Поставщик не вернул строку ProviderManifestToken».

Вот мои типы POCO и Context:

class Person
{
    [Key]
    public int Id { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }
    public int Age { get; set; }
}


class Context:DbContext
{
    public DbSet<Person> People { get; set; }
}

Я что-то упустил здесь?

Заранее спасибо!


person Cranialsurge    schedule 03.04.2012    source источник


Ответы (1)


Измените строку подключения на:

<connectionStrings> 
  <add name="Context" connectionString="Data Source=|DataDirectory|\Test.sdf"
    providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings>

И измените фабрику соединений по умолчанию:

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="System.Data.SqlServerCe.4.0" />
  </parameters>
</defaultConnectionFactory>
person ErikEJ    schedule 03.04.2012
comment
К сожалению, это тоже не сработало. Я действительно пробовал это раньше. Я заметил, что именно этот формат генерируется, если я пытаюсь добавить в проект новый «файл базы данных» и выбираю SQL Server CE в качестве источника. - person Cranialsurge; 03.04.2012
comment
Имя должно совпадать с полным именем вашего DbContext или использовать name=CodeFirstExampleContext в конструкторе DbContext — см. petebarber.blogspot.com/2012/04/ - person ErikEJ; 04.04.2012