3

使用 VS 2010 SP1,我从“internet”模板创建了一个 ASP.NET MVC4 项目。然后我为 SQL Server CE 4.0 创建了一个连接字符串:

<add name="DefaultConnection"
     connectionString="Data Source=|DataDirectory|MyDatabase.sdf;Password=123456" 
     providerName="System.Data.SqlServerCe" /> 

在 cassini 中成功调试启动 Web 应用程序后,我选择“注册”用户选项。这会立即导致InitializeSimpleMembershipAttribute过滤器执行。过滤器在到达此代码时使站点崩溃:

Database.SetInitializer<UsersContext>(null);
using (var context = new UsersContext())
{
    if (!context.Database.Exists())
    {
        // Create the SimpleMembership database without Entity Framework migration schema
        ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
    }
}
//This line never executes.  It is meant to configure my custom user table.
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "ID", "UserName", true);

Exists()检查抛出一个ArgumentException说明:

找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

现在我想确定(1)我的连接字符串没有问题,(2)我的提供程序没有问题。为此,我在Exists()检查之前插入了一段代码。该片段使用 newSqlCeEngine创建数据库,并调用 Dapper 来设置用户表。该代码工作得很好,就在Exists()支票再次爆炸之前。

然后我认为 EF 可能需要一些额外的设置帮助。我尝试替换我的 EF defaultConnectionFactory web.config

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="System.Data.SqlServerCe.4.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

我收到的异常仍然没有改变。

我现在想知道 EF 是否需要一个“特殊”连接字符串才能与 SQL Server CE 一起使用。我会在这里这里检查。但乍一看,我不确定这是问题所在。

想法?

4

2 回答 2

0

您需要安装 Sql Server Compact 版本。你可以从这里下载。

于 2012-12-19T03:10:09.373 回答
0

EF 要求安装提供程序。使用连接到数据库选项之一进行检查。例如,将实体数据模型添加到项目中。只是提供给它的提供者。你看到你的首选连接客户端了吗? 在此处输入图像描述

似乎精简版应该有一些限制...... http://technet.microsoft.com/en-us/library/cc835494.aspx

那么我认为它的“默认连接”问题参见上下文构造函数。除非您传入替代名称,否则 EF 会查找该名称的连接。尝试...

<connectionStrings>
    <add name="MyContextName" connectionString="bla";App=EntityFramework"
       providerName="System.Data.SqlServerCe.4.0" />
于 2012-12-19T03:25:13.020 回答