14

我目前正在使用 Oracle 数据库开发 ASP.NET MVC 4 项目。我已经成功地在我的 Web.config 文件中添加了连接字符串,如下所示:

<add name="OracleDBConnString" connectionString="Provider=MSDAORA;Data Source=ISDQA;User ID=isd;Password=isdqa;" providerName="System.Data.OleDB" />

但是当我创建一个新项目时,它已经有一个内置的身份验证类。如何一劳永逸地修改这些类?我想更改默认值ConnString

这是我的模型:

public class UsersContext : DbContext
{
    public UsersContext()
        : base("OracleDBConnString")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

public class LoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

这是我的用户控制器:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    //I WANT TO MODIFY THIS PART
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
    {

        return RedirectToLocal(returnUrl);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", "The user name or password provided is incorrect.");
    return View(model);
}

更新

当我更改为base("DefaultConnection")base("OracleDBConnString"),出现此错误:

Server Error in '/' Application.

A null was returned after calling the 'get_ProviderFactory' method on a store provider instance of type 'System.Data.OleDb.OleDbConnection'. The store provider might not be functioning correctly.

请注意,我已经添加using System.Data.OleDb;了我的使用。

4

2 回答 2

8

您可以在 web.config 中设置您使用的成员资格提供程序,而不是创建特殊类。

对于 Oracle,有一个OracleMembershipProvider类,您可以在此处找到。对于 MySQL,您可以使用MySQLMembershipProvider. 有一篇很好的文章如何设置它:如何设置和配置 MySql 成员资格提供程序

此外,您可以使用Entity Framework Code First Membership Provider 并使用适当的提供程序(请参阅本文:Entity Framework Code-First support for Oracle, MySQL, PostgreSQL and SQLite)。我没有尝试这个解决方案,但它看起来很有希望。

如果以上没有任何帮助,您可以编写自己的会员资格提供程序,但我相信您可以找到已经存在的东西。

总结一下:不要更改连接类型,而是更改特定于您需求的会员提供商。您的代码不应注意到更改,因为每个成员资格提供程序都继承基MemebershipProivder

于 2013-07-31T07:46:55.277 回答
1

恐怕 Asp.Net SimpleMembership 和 Asp.Net Membership 是不同的野兽。Asp.Net MVC4 模板使用 SimpleMembership (WebSecurity.Login)。

在此处查看我关于 Asp.Net MVC4 中 MySql Membership 提供程序使用的回答。简单地更改连接字符串或其他东西对您没有帮助。您需要找到一个 Oracle Asp.Net SimpleMembership 或自己编写。

于 2013-08-02T15:48:49.643 回答