2013-05-06 39 views
7

Tôi có một số trang web có cơ sở dữ liệu ELMAH riêng biệt. Tôi muốn có một trang web riêng để xem tất cả các cơ sở dữ liệu này.Thay đổi cơ sở dữ liệu ELMAH trong mã

Tôi đã tạo một trang ASP.NET MVC 4 mới cho mục đích này. Tôi đã thêm gói NuGet "Elmah.MVC" và thêm phần sau vào Web.config:

<connectionStrings> 
    <add name="Elmah.Sql" connectionString="..." /> 
</connectionStrings> 
<elmah> 
    <errorLog type="Elmah.SqlErrorLog" connectionStringName="Elmah.Sql" /> 
</elmah> 

Điều này chỉ hoạt động tốt với một cơ sở dữ liệu. Tôi cũng có thể chuyển đổi cơ sở dữ liệu bằng cách thay đổi chuỗi kết nối, nhưng bây giờ tôi muốn có thể chuyển đổi cơ sở dữ liệu từ mã. Có cách nào làm được việc này không?

Trả lời

11

ELMAH có một lớp cho tùy chỉnh các bản ghi lỗi. Bạn chỉ cần triển khai lớp này như

public class YourErrorLog : SqlErrorLog 
{ 
    public override string ConnectionString 
    { 
     get 
     { 
      //return any connection string that you want 
     } 
    } 
} 

trong triển khai này, bạn có thể đọc bất kỳ chuỗi kết nối nào bạn muốn. Cuối cùng, bạn có thể cho biết ELMAH biết về ErrorLog rằng bằng cách

<elmah> 
    <errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" /> 
</elmah> 

Bạn có thể xem chi tiết here

Tôi cũng phát hiện ra một ví dụ trong trường hợp của bạn here

Hope trợ giúp này.

+0

Cách tôi yêu trang web này! –

0

Nếu bạn muốn chuyển đổi cơ sở dữ liệu từ mã, bạn sẽ không thể dựa vào Web.config. Bạn sẽ cần phải lưu trữ các kết nối hoạt động trong một lớp học như thế này:

public class DatabaseSession 
{ 
    public string ConnectionString { get; set; } 
} 

và sau đó bạn sẽ cần phải lưu trữ một ví dụ về điều đó trong Session:

Session["DatabaseSession"] = new DatabaseSession() { ConnectionString = "your connection string"; } 

và bạn sẽ cần phải chạy dòng đó mỗi khi bạn muốn thay đổi kết nối cơ sở dữ liệu. Sau đó, khi bạn muốn kết nối với cơ sở dữ liệu, bạn sẽ cần phải kéo nó ra khỏi phiên.

Tuy nhiên, bạn có thể lưu trữ tất cả các chuỗi kết nối khác nhau trong Web.config và để người dùng chọn từ danh sách đó - bạn không thể tận dụng nó để xác định chuỗi kết nối.

LƯU Ý: bạn chỉ có thể lưu trữ các chuỗi kết nối trong phiên quá Session["DatabaseConnection"] = "your connection string"

3

Tôi đang truy xuất chuỗi kết nối lúc chạy nên tùy chọn từ ThangChung không hoạt động đối với tôi. Nhưng với một vài thay đổi nhỏ tôi đã làm cho nó hoạt động.

SqlErrorLog, cả hai nhà thầu đều được yêu cầu.

public class ElmahSqlErrorLog : SqlErrorLog 
{ 
    public override string ConnectionString 
    { 
     get { return SettingsXmlService.GetConnectionString(); } 
    } 

    public ElmahSqlErrorLog(IDictionary config) : base(config) 
    { 
    } 

    public ElmahSqlErrorLog(string connectionString) : base(connectionString) 
    { 
    } 
} 

Các web.config (thêm sau system.webServer)

<elmah> 
    <errorLog type="Business.Infrastructure.Elmah.ElmahSqlErrorLog, Business" connectionString="-" applicationName="Topsite" /> 
</elmah> 

Giá trị của connectionString không quan trọng bởi vì chúng tôi lấy nó khi chạy, nó không thể để trống mặc dù.

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