Asp.net mvc 4 将MVC4SimpleMembership与现有的数据库first EF模型一起使用
我第一次尝试在我的MVC4中使用SimpleMembership,我已经有了一个现有的数据库和基于它创建的EF5模型!我搜索了很多,但我找不到如何在我的案例中使用它,也找不到如何在我自己的模型下拥有一切 如果有人能告诉我怎么做就好了Asp.net mvc 4 将MVC4SimpleMembership与现有的数据库first EF模型一起使用,asp.net-mvc-4,entity-framework-5,sql-server-2012,simplemembership,ef-database-first,Asp.net Mvc 4,Entity Framework 5,Sql Server 2012,Simplemembership,Ef Database First,我第一次尝试在我的MVC4中使用SimpleMembership,我已经有了一个现有的数据库和基于它创建的EF5模型!我搜索了很多,但我找不到如何在我的案例中使用它,也找不到如何在我自己的模型下拥有一切 如果有人能告诉我怎么做就好了 谢谢在web.config的appSettings标签中,添加行 <add key="enableSimpleMembership" value="true"/> 在您的公共类AccountController上面:Controller 当您想要强制用
谢谢在web.config的appSettings标签中,添加行
<add key="enableSimpleMembership" value="true"/>
在您的公共类AccountController上面:Controller
当您想要强制用户登录某个页面时,您可以在pages controller中写入该页面
[Authorize]
这些表将在数据库中自动生成。如果您想在这些表中添加更多字段,只需通过谷歌搜索即可
这里有一个链接以获取更多信息纯粹作为参考,创建ASP.NET MVC 4 Web应用程序项目的新Internet应用程序模板(即通过文件>新项目)可能是一个好主意 如果查看
AccountController
,正如@zms6445所说,它用InitializeSimpleMembership
属性修饰。您可以在根目录的Filters文件夹中的InitializeSimpleMembershipAttribute.cs文件中找到此属性的实现
在这里,这是拼图中缺少的部分-您需要连接现有数据库,以便SimpleMembershipProvider
使用它。这是您需要的代码:
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
try
{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Something is wrong", ex);
}
}
}
需要注意的一些事项:
CONNECTION\u STRING\u NAME
是web.config连接字符串中的一个条目-您不能在此处使用模型连接字符串-SimpleMembershipProvider无法识别该格式!您需要指定一个System.Data.SqlClient
连接字符串,例如
USER\u TABLE
是数据库中用来保存额外用户信息的表,如名字、姓氏等。它通过USER\u ID\u字段链接到自动生成的表USER\u ID\u字段通常是用户表的主键。它必须是int
类型
USER\u ID\u NAME
是用户的唯一名称,可以是电子邮件地址autoCreateTables
设置为true
,以确保创建SimpleMembership工作所需的表(如果它们不存在)AccountController
点击页面时,才会触发此代码,因为这是由属性修饰的。您可以在其中放置一个断点,并查看它的运行情况
这应该让你开始-互联网应用程序模板是一个很好的模板遵循,如果你卡住了
希望这能有所帮助。我按照你的指示做了,但是我从LazyInitializer那里得到了一个targetInvestment异常。有什么想法吗?我找到了:)SQL server防火墙是导致该错误的原因!我讨厌防火墙:)@UmutCanKöseali我想我也有同样的问题,你如何关闭sql防火墙?@Biplov13,你最终是如何让它正常运行的?我有一个azure sql数据库,ip范围基本上是受限的,我已经超出了范围。我只是添加我的当前IP。它起作用了
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
try
{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Something is wrong", ex);
}
}
}