2013-07-29 28 views
14

Tôi hiện đang làm việc trên dự án ASP.NET MVC 4 với cơ sở dữ liệu Oracle. Tôi đã thêm thành công chuỗi kết nối vào tệp Web.config của mình như sau:Cấu hình ứng dụng ASP.NET MVC 4 với Cơ sở dữ liệu Oracle

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

Nhưng khi tạo dự án mới, nó đã có sẵn lớp xác thực tích hợp. Làm thế nào tôi có thể sửa đổi các lớp này một lần và cho tất cả? Tôi muốn thay đổi mặc định ConnString.

Dưới đây là mô hình của tôi:

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; } 
} 

Dưới đây là bộ điều khiển tài khoản của tôi:

[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); 
} 

CẬP NHẬT

Khi tôi thay đổi base("DefaultConnection")-base("OracleDBConnString"), tôi đã nhận lỗi này:

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. 

Lưu ý rằng tôi đã thêm using System.Data.OleDb; vào mục đích sử dụng của mình.

Trả lời

8

Thay vì tạo lớp đặc biệt, bạn có thể thiết lập trong web.config mà nhà cung cấp thành viên bạn sử dụng.

Đối với Oracle, có lớp OracleMembershipProvider, bạn có thể tìm thấy here. Đối với MySQL, bạn có thể sử dụng MySQLMembershipProvider. Có một bài viết hay về cách bạn có thể thiết lập: How to Setup and Configure MySql Membership Provider

Ngoài ra, bạn có thể sử dụng Entity Framework Code First Membership Provider và sử dụng nhà cung cấp thích hợp (xem bài viết này: Entity Framework Code-First support for Oracle, MySQL, PostgreSQL and SQLite). Tôi đã không thử giải pháp này, nhưng có vẻ đầy hứa hẹn.

Nếu không có gì ở trên giúp bạn có thể viết nhà cung cấp Memebership của riêng bạn, nhưng tôi chắc chắn rằng bạn có thể tìm thấy thứ gì đó đã tồn tại.

Để tổng hợp: Thay vì thay đổi loại kết nối, hãy thay đổi nhà cung cấp thành viên sẽ cụ thể cho nhu cầu của bạn. Mã của bạn không được thông báo thay đổi, bởi vì mọi nhà cung cấp thành viên đều thừa kế cơ sở MemebershipProivder lớp

+0

Tôi không hiểu. Tôi có phải thay đổi chuỗi kết nối không? –

+0

Bằng cách tôi đã cài đặt Nhà cung cấp thành viên CodeFirst. –

+0

@garath Bạn có thể giải thích cho tôi cách thiết lập nhà cung cấp Oracle MemberShip Hãy nhìn vào Câu trả lời của tôi ở đây: http://stackoverflow.com/questions/23094959/using-oracle-membership-provider-in-asp-net-mvc – Chlebta

1

Asp.Net SimpleMembership and Asp.Net Membership là những con thú khác nhau, tôi sợ. Các mẫu Asp.Net MVC4 sử dụng SimpleMembership (WebSecurity.Login).

Xem câu trả lời của tôi về việc sử dụng nhà cung cấp tư cách thành viên MySql trong Asp.Net MVC4 here. Chỉ cần thay đổi chuỗi kết nối hoặc những thứ khác sẽ không giúp bạn. Bạn cần phải tìm một Oracle Asp.Net SimpleMembership hoặc viết của riêng bạn.

Các vấn đề liên quan