创建MVC4会员数据库

7

我熟悉使用 aspnet_regsql.exe 创建成员资格数据库(它会生成11个表)。

然而,在我的MVC4项目中,VS2010只创建了一个包含六个表(Applications、Memberships、Profiles、Roles、Users和UsersInRoles)的成员资格数据库。

如何创建一个具有这种(新的?)架构的数据库呢?


你是在问是否可以使用新的MVC4/ASP.Net 4.5六表DB架构创建一个先于MVC4的应用程序吗? - one.beat.consumer
1
好的,MVC 4中的提供程序并不相同,MVC4引入了新的提供程序 - nuget.org/packages/System.Web.Providers。感谢所有的帮助。 - LenPopLilly
3个回答

4
你需要做的就是: 将你的web.config文件更改为指向你想要的连接。
<add name="DefaultConnection" connectionString="uid=****;pwd=*****;server=(local);database=****" providerName="System.Data.SqlClient" />

验证过滤器\ InitializeSimpleMembershipAttribute.cs

第41行应该写成:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

注意,autoCreateTables设置为true,而且在web.config中设置的连接名称已经设定好了。
现在用户注册时将会查看你所设置的数据库。如果表格尚不存在,则会被创建。

2

虽然这几乎是正确的答案(我刚刚尝试使用命令行选项只创建相同的六个表),但VS2010 MVC4正在创建具有稍微不同结构的表(例如,在mvc db模式中没有Memberships/MobilePIN)。所以我想他们一定是用另一种方式创建的? - LenPopLilly
我认为你应该看一下这篇文章:http://computerscribe.com/blogs/blogPost?id=11 - stian.net
非常棒的文章,谢谢。我现在理解了很多。我已经将文章中提到的脚本(Common、Membership和Roles)加载到SQL Server Management Studio中,但它们生成的表名为aspnet_Membership,这就是问题所在,因为当您使用Internet应用程序模板时,MVC4生成的表名为Membership、Roles(没有aspnet_部分)。MVC4正在做一些不同的事情... - LenPopLilly
1
好的,提供程序不同,MVC4引入了新的提供程序 - http://nuget.org/packages/System.Web.Providers - LenPopLilly

2

aspnet_regsql.exe是ASP.Net架构的一部分,而不是MVC。

我猜MVC4开发预览版在其项目结构中附带了一些自定义模式脚本,或者它安装了新的ASP.Net 4.5版本的aspnet_regsql.exe的预览版。

如果后者是真的,你可以使用它创建一个数据库,并将其连接到你的MVC3(及以前版本)应用程序。这里的影响是由于模式差异,你很可能需要编写自己的提供程序。

另一个选择是在MVC4模板中创建数据库,删除该项目,并在MVC3项目中编写一个使用该数据库的DA层。你只需要获取连接字符串即可。但同样需要编写自己的提供程序,因为旧的提供程序不知道新的6个表模式。


2
谢谢one.beat,但我已经在研究中发现MVC4中的提供程序实际上是不同的。无论如何,感谢您的帮助。 - LenPopLilly
1
不客气。是的,ASP.Net 4.5将拥有新的提供程序和新的数据库架构。就我个人而言,我更喜欢自己编写代码,而不是使用他们的所有成员资格相关的东西。有时候就像吃肥牛一样。;) - one.beat.consumer
@LillyPop - 我回答得够好吗? - one.beat.consumer
是的,我已经投了一票,以为我已经点过赞了,但现在已经完成了 :-) - LenPopLilly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接