【问题标题】:EF will only let me choose SQL Server CE 3.5EF 只会让我选择 SQL Server CE 3.5
【发布时间】:2012-03-01 01:56:51
【问题描述】:

我有一个包含两个项目的 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 中的连接字符串的数据源部分会是什么样子?我知道 Web 项目的连接字符串看起来像这样:

    Data Source=|DataDirectory|\CE4DB.sdf
    

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

    这样的绝对路径
    C:\Code\MyProject\MyApp.MvcUI\App_Data\CE4DB.sdf
    

如果是这样,有没有办法让它成为一个相对路径,这样当人们从源代码管理中拉下项目时,它仍然可以在没有路径更正的情况下工作?

【问题讨论】:

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


    【解决方案1】:

    我相信您必须执行以下操作(我为我所做的)

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

    【讨论】:

    • 谢谢!想知道你是否可以帮助stackoverflow.com/questions/9509022/…
    • 你让它在类库中工作?我已经这样做了,而且向导仍然显示我的问题中的图片。
    • 您是否安装了 CE 4.0 运行时?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我在这里尝试了这些建议。我的 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 中的连接字符串并不重要,因为它从活动项目的配置文件中读取。在这种情况下,Web.Config 用于 MvcUI 项目。其中连接字符串更加简单,因为路径被简化了。

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

      【讨论】:

      • 我遇到了同样的问题。我尝试将连接字符串添加到我的 app.config,但是在添加 EF 模型时,我无法从 app.config 文件中选择连接字符串。因此,我不得不添加 EF 模型并为我的本地 SQL 服务器 express 创建一个新的连接字符串,当被问及要映射哪些对象时,我没有选择。所以我得到了一个空的 EF 模型,它将连接字符串保存到我的 app.config 中。然后我只是将 app.config 中的连接字符串更改为指向我的 CE 数据库,打开 EF 设计器并从数据库中更新,瞧! :-)
      【解决方案4】:

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

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

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

      【讨论】:

      • 我确实使用了 nuget,并且我已经获得了 EF 4.3。我不知道他们有 Sql Server Compact。谢谢你。不过有一个问题,我是在域(类库)项目中还是在 Web 项目中安装它?
      • 似乎将它添加到类库并没有帮助。向导仍然不允许我像将 EDMX 放入 Web 项目时那样选择 CE 4。在一个项目而不是另一个项目中工作。太奇怪了。尽管如此,我确实让它工作了。我会把它作为答案发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多