将SQL Server Compact与ASP.NET标识一起使用

时间:2014-09-06 11:52:00

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

我正在使用最新的ASP.NET MVC,身份和实体框架。

sample Identity project使用Sql Server Express。我想使用Sql Server Compact。

我做了什么:

  • 创建了一个新的空解决方案(不是MVC模板)

  • 已安装的示例项目:Install-Package Microsoft.AspNet.Identity.Samples -Pre

  • 已安装:Install-Package Microsoft.SqlServer.Compact

  • 已安装:Install-Package EntityFramework.SqlServerCompact

  • web.config中的默认连接字符串更改为:

    <add name="Foo" 
         providerName="System.Data.SqlServerCe.4.0" 
         connectionString="Data Source=|DataDirectory|\Foo.sdf;" />
    
  • 更改ApplicationDbContext以使用Foo连接字符串:

    ApplicationDbContext() : base("name=Foo", false)
    

问题是,第一次访问ApplicationDbContext时(播种期间,ApplicationDbInitializer.InitializeIdentityForEF()方法):

  • 创建数据库
  • 我为InvalidOperationException: UserId not found
  • 行获得result = userManager.SetLockoutEnabled(user.Id, false);

我认为这就像更改连接字符串一样简单 - 所以我做错了什么?或者换句话说,如何将解决方案从SQL Server Express转换为SQL Server Compact?

1 个答案:

答案 0 :(得分:3)

发现错误。我的连接字符串错了,我有:

<add name="Foo"
     providerName="System.Data.SqlServerCe.4.0"
     connectionString="
       Data Source=|DataDirectory|\Foo.sdf;
       Persist Security Info=false;
       "/>

哪个不起作用(XML,所以认为空白被忽略,它不是),而这样做:

<add name="Foo"
     providerName="System.Data.SqlServerCe.4.0"
     connectionString="Data Source=|DataDirectory|\Foo.sdf;Persist Security Info=false;" />

无论如何,问题本身包含了使用带有Identity2的sqlce的一步一步。也许它会帮助别人。