在ELMAH中将错误记录到数据库中,您可以写:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="EducoparkEntities"/>
但是,如果我使用EntityFramework,这不起作用,因为EF的连接字符串也包含元数据:
<add name="EducoparkEntities" connectionString="metadata=res://*/EducoparkData.csdl|res://*/EducoparkData.ssdl|res://*/EducoparkData.msl;provider=System.Data.SqlClient;provider connection string="Data Source=(Local);Initial Catalog=...;User Id=...;Password=...;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/>
那么,我如何在Elmah中使用EntityFramework连接字符串?
答案 0 :(得分:10)
您可以通过实体框架中提供的ConnectionStringBuilder提取数据库连接字符串。
private string ExtractConnectionStringFromEntityConnectionString(string entityConnectionString)
{
// create a entity connection string from the input
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(entityConnectionString);
// read the db connectionstring
return entityBuilder.ProviderConnectionString;
}
要将该数据库连接字符串插入Elmah,您必须在 Application_Start (在Global.asax中)设置
答案 1 :(得分:4)
public class YourErrorLog : SqlErrorLog
{
public override string ConnectionString
{
get
{
//return any Connection string EF or any
}
}
}
并修改配置
<elmah>
<errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" />
</elmah>
Elmah会询问sql连接字符串但是在需要时会得到你的连接字符串。
答案 2 :(得分:2)
你不能 - 至少不是直接的。您需要做的是提取真正引用数据库的EF连接字符串的一部分(provider connection string
),并将其放入web.config的<connectionStrings>
部分中的自己的条目中。 :
<connectionStrings>
<add name="EducoparkELMAH"
connectionString="Data Source=(Local);Initial Catalog=...;User Id=...;Password=...;MultipleActiveResultSets=True"
provider="System.SqlClient" />
</connectionStrings>
或者您可以通过编程方式执行 - 实体上下文将具有一个名为“Connection”的属性,该属性又具有一个属性“ConnectionString”,这是您正在寻找的属性:
string elmahConnectionString = EducoparkEntities.Connection.ConnectionString;
马克
答案 3 :(得分:0)
您可以使用Elmah.Contrib.EntityFramework nuget包。
(免责声明:我写了)