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

Posted

技术标签:

【中文标题】如何在 Code First 方法中自动生成 SDF【英文标题】:How do you auto generate SDF in Code First approach 【发布时间】:2012-04-03 17:33:31 【问题描述】:

我创建了一个 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>

我已经注释掉了“参数”,并在顶部的标签下添加了一个连接字符串 sn-p:

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

我错过了什么吗?

提前致谢!

【问题讨论】:

【参考方案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>

【讨论】:

不幸的是,这也不起作用。我之前实际上已经尝试过。我注意到,如果我尝试将新的“数据库文件”添加到项目并选择 SQL Server CE 作为源,就会生成这种格式。 名称必须与您的 DbContext 的全名匹配,或者在 DbContext 构造函数中使用 name=CodeFirstExampleContext - 请参阅petebarber.blogspot.com/2012/04/…

以上是关于如何在 Code First 方法中自动生成 SDF的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 localdb 在 Code First 中查看数据库图

如何在 Entity Framework Code First 中删除表?

使用 EF4 Code First 时如何控制生成的 nvarchar 列的长度?

Entity Framework 5.0系列之自动生成Code First代码

使用 WebDeploy 发布 Web 应用程序时如何在 DB 上自动运行 Code First 迁移

七色花基本权限系统- 让EntityFramework Code First自动合并/迁移/数据初始化