如何在Code First方法中自动生成SDF

时间:2012-04-03 17:33:31

标签: entity-framework ef-code-first sql-server-ce

我创建了一个POCO和一个上下文,并从NuGet(v4.3.1)向我的项目中添加了EF。与我习惯的相比,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>

我已经注释掉了'参数'并在顶部的标记下添加了一个连接字符串代码:

<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数据库。但现在不是这样做的。相反,我得到以下例外:

“从数据库获取提供程序信息时发生错误。这可能是由实体框架使用不正确的连接字符串引起的。检查内部异常以获取详细信息并确保连接字符串正确。”

内部例外是:

“提供程序未返回ProviderManifestToken字符串。”

以下是我的POCO和上下文类型:

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; }
}

我在这里错过了什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

将连接字符串更改为:

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