EF只会让我选择SQL Server CE 3.5

时间:2012-03-01 01:56:51

标签: c# asp.net asp.net-mvc entity-framework sql-server-ce

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

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

MyApp.Domain应该包含Entity Framework EDMX文件,但如果我在那里添加它,我就没有选择使用SQL Server CE 4,只有3.5。

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

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

问题

  1. 如何将我的Entity Framework内容放入MyApp.Domain项目并使用位于MyApp.MvcUI项目中的SQL Server CE 4数据库?

  2. 一旦我解决了这个问题,App.Config中我的连接字符串的数据源部分会是什么样子?我知道web项目的连接字符串将如下所示:

    Data Source=|DataDirectory|\CE4DB.sdf
    

    但是App.Config项目中的MyApp.Domain会是什么样子?它会像

    这样的绝对路径
    C:\Code\MyProject\MyApp.MvcUI\App_Data\CE4DB.sdf
    
  3. 如果是这样,有没有办法让它成为一个相对路径,所以当人们从源代码控制中拉下项目时,它仍然可以在没有路径修正的情况下工作?

4 个答案:

答案 0 :(得分:3)

我相信你必须做以下事情(我为我做了什么)

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

我确实让它工作了。我只是使用了一个连接字符串,就像我将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" />

答案 3 :(得分:0)

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

这也将在您的应用配置中设置所需的提供商,以防缺少。

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