EF只允许我选择SQL Server CE 3.5

本文关键字:CE Server SQL 允许我 选择 EF | 更新日期: 2023-09-27 18:26:08

我有一个包含两个项目的Visual Studio解决方案:MyApp.MvcUIMyApp.Domain(类库)。

MyApp.MvcUI包含我的SQL Server CE 4数据库。

MyApp.Domain应该包含实体框架EDMX文件,但如果我在那里添加它,我就不能选择使用SQL Server CE 4,只有3.5。

http://www.codetunnel.com/content/images/sqlce35only.jpg

如果我在MvcUI项目中添加EDMX,那么我就可以选择SQL Server CE 4。

问题

  1. 如何将实体框架内容放入MyApp.Domain项目并使用MyApp.MvcUI项目中的SQL Server CE 4数据库?

  2. 一旦我解决了这个问题,App.Config中连接字符串的数据源部分会是什么样子?我知道网络项目的连接字符串会简单地看起来像这样:

    Data Source=|DataDirectory|'CE4DB.sdf
    

    但在MyApp.Domain项目的App.Config中会是什么样子?它会是像那样的绝对路径吗

    C:'Code'MyProject'MyApp.MvcUI'App_Data'CE4DB.sdf
    

如果是这样的话,有没有一种方法可以使其成为一条相对路径,这样当人们将项目从源代码管理中删除时,它仍然可以在没有路径校正的情况下工作?

EF只允许我选择SQL Server CE 3.5

我相信你必须做以下(我为我的做的)

  1. 安装EF 4.1
  2. 安装SQL Server CE 4.0

4.0 EDMX向导仅适用于Web项目,正如您所注意到的。您可以使用我的SQL Server Compact Toolbox外接程序在任何项目类型中创建和4.0 EDMX。

我尝试了这里的建议。我的EF已经是最新版本(截至本文发布时为4.3),但我确实通过nuget和EntityFramework.SqlServerCompact安装了SQL Server CE,上面写着"允许SQL Server Compact 4.0与Entity Framework一起使用"。在尝试从数据库更新EDMX模型时,仍然没有在向导中使用CE 4的选项。如果这一切都是在MVC项目中完成的,那么我可以选择在问题中的对话框中使用CE4。

不过我确实让它发挥了作用。我只是使用了一个连接字符串,就像我把EDMX放在MVC项目中时它生成的那个连接字符串一样。

<add name="EntityContainer" 
     connectionString="metadata=res://*/Model1.csdl|
                                res://*/Model1.ssdl|
                                res://*/Model1.msl;
                       provider=System.Data.SqlServerCe.4.0;
       provider connection string=&quot;
         Data Source=..'MyApp.MvcUI'App_Data'CE4DB.sdf&quot;"
     providerName="System.Data.EntityClient" />

然后,我可以让EF设计器从数据库中读取。额外的一点是,数据源路径是相对的:D,所以其他从源代码管理中删除项目新副本的开发人员也可以直接使用EF设计器,而无需对其进行调整。我计划很快切换到代码优先的EF,但我想先用EDMX实现这一切,因为这是我目前所知道的。

显然,在运行时,MyApp.Domain中的连接字符串并不重要,因为它是从活动项目的配置文件中读取的。在本例中,MvcUI项目的Web.Config。其中连接字符串甚至更容易,因为路径被简化了。

<add name="EntityContainer"
     connectionString="metadata=res://*/Model1.csdl|
                                res://*/Model1.ssdl|
                                res://*/Model1.msl;
                       provider=System.Data.SqlServerCe.4.0;
       provider connection string=&quot;
         Data Source=|DataDirectory|'CE4DB.sdf&quot;"
       providerName="System.Data.EntityClient" />

我建议使用NuGet下载EF、SQL Server CE 4.0和所有需要的依赖项,并自动将它们添加到您的项目中。

这还将在应用程序配置中设置所需的提供程序,以防丢失。

如果您不熟悉NuGet,可以在解决方案资源管理器窗口中右键单击您的项目,然后选择"添加库引用"。(也许这不是准确的名字,但很容易找到)。