我已经创建了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数据库将自动生成。但是它现在不这样做。相反,我得到以下异常:

“从数据库获取提供者信息时发生错误。这可能是由于Entity Framework使用了错误的连接字符串引起的。请检查内部异常以获取详细信息,并确保连接字符串正确。”

内部异常是:

“提供程序未返回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; }
}


我在这里想念什么吗?

提前致谢!

最佳答案

将连接字符串更改为:

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

关于entity-framework - 如何使用Code First方法自动生成SDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9998407/

10-13 06:00