微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc-4 – 使用MVC 4 SimpleMembership与现有的数据库优先EF模型

我试图在我的MVC 4中首次使用SimpleMembership,而且我已经有了一个现有的数据库和基于它的EF5模型!我搜索了很多,但是我无法找到我如何在我的情况下使用它,也把所有东西都放在我自己的模型下。

如果有人能给我一个想法,那将是很棒的。

谢谢

解决方法

作为参考点,创建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_STRING_NAME是您的web.config ConnectionStrings中的一个条目 – 您不能在此使用模型连接字符串 – SimpleMembershipProvider不会识别该格式!您需要指定一个System.Data.sqlClient连接字符串,例如

< add name =“CONNECTION_STRING_NAME”connectionString =“data source = SERVER; initial catalog = DATABASE; user id = USER; password = PASSWORD;” providerName =“System.Data.sqlClient”/>
> USER_TABLE是您的数据库中的表以容纳其他用户信息,例如名字,姓氏等。这通过USER_ID_FIELD链接自动生成的表。
> USER_ID_FIELD通常是您的Users表的主键。它必须是int类型。
> USER_ID_NAME是用户的唯一名称,可以是电子邮件地址。
> autocreateTables设置为true,以确保SimpleMembership工作所需的表不存在时创建。

当然,这个代码只有通过AccountController打到一个页面才被触发,因为这是由属性装饰的。你可以在那里放一个断点,看看它在行动。

这应该让你开始 – 互联网应用程序模板是一个很好的模板,如果你被卡住了。

希望这可以帮助。

原文地址:https://www.jb51.cc/aspnet/252254.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐