我正在使用最新的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?
答案 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的一步一步。也许它会帮助别人。