如何使用Elmah的EntityFramework连接字符串?

时间:2009-07-05 06:21:04

标签: asp.net .net entity-framework elmah

在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=&quot;Data Source=(Local);Initial Catalog=...;User Id=...;Password=...;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/>

那么,我如何在Elmah中使用EntityFramework连接字符串?

4 个答案:

答案 0 :(得分:10)

1

您可以通过实体框架中提供的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;
}

2

要将该数据库连接字符串插入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包。

(免责声明:我写了)