使用SQL Server Compact和Entity Framework的连接字符串?

Tes*_*rex 10 sql-server-ce entity-framework-4

我已经为此尝试了谷歌.我已经安装了SQL Server CE 4.0,并且有EF 4.1,但我无法获得正确的连接字符串.什么都不connectionstrings.com适用于我.

我只想创建一个SqlCeEngine对象,但无论我尝试什么,我都会遇到一些异常.最近一直是

连接字符串中的未知连接选项

使用"元数据","应用程序","提供程序"或"提供程序连接字符串"之后.我知道EF需要连接字符串中的元数据.我无法想象如果没有"提供者连接字符串",任何事情都可以做到.

到目前为止我有这个:

<add name="DBContext" 
     connectionString="provider connection string=&quot;Data Source=MyDbFile.sdf;Persist Security Info=False;&quot;" 
     providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

有一次,我用元数据:

<add name="DBContext" 
     connectionString="metadata=res://*/Data.DBContext.csdl|res://*/Data.DBContext.ssdl|res://*/Data.DBContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDbFile.sdf;Persist Security Info=False;&quot;" 
     providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

它是否需要元数据?什么在连接字符串的"app"部分?提供者应该是什么,System.Data.SqlClient或者某些SQL Server CE版本?(当我尝试添加引用时,我仍然找不到.我的添加引用窗口仍然只包含System.Data.SqlServerCe版本3.5.1.0.)或者什么都没有?

providerName属性应该包含哪些内容?是对的System.Data.EntityClient吗?这就像这里有10个不同的变量,每个组合都给我一个新的同样神秘的错误,其中没有一个在Google上有用.我的智慧结束了.这甚至可能吗?

Row*_*ego 13

您可以在App.config文件中尝试此操作(EF5代码首次迁移和SQL Server CE 4.0):

<connectionStrings>
    <add name="DefaultConnection"
         providerName="System.Data.SqlServerCe.4.0"
         connectionString="Data Source=|DataDirectory|\Data\ProjectDb.sdf"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

在你ProjectDb上课:

class ProjectDb : DbContext
{
    public ProjectDb()
        : base("DefaultConnection")
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

它会像魅力一样工作.

您可以在此处找到更多信息:http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models的.aspx

  • Dude,"| DataDirectory |\Data\ProjectDb.sdf"是一个相对路径 (2认同)

Lu5*_*u55 6

我在使用SQL Server Compact Edition 4.0的Entity Framework 5.0 Code First方法上遇到了同样的问题

为了解决这个问题,我将实例传递SqlCeConnection给了DbContext构造函数:

public class Storage : DbContext
{
    public Storage()
        : base(new SqlCeConnection("Data Source=Database.sdf;Persist Security Info=False;"),
             contextOwnsConnection: true)
    { }

    //...
}
Run Code Online (Sandbox Code Playgroud)

如果你不想内嵌连接字符串,你可以得到它的App.config通过ConfigurationManager 当然,你应该到System.Data.SqlServerCe的正确版本添加引用(看一些推广标签里面添加引用对话框)


Ric*_*dle 0

此 TechNet 文章概述了将 EF 与 SQL Server Compact 结合使用的步骤。这句话引起了我的注意,可能会解决您的问题:

确保连接字符串中的provider=System.Data.SqlServerCe.3.5 。

(我假设您需要 4.0 而不是 3.5)

尝试一下,看看事情进展如何。