8

在 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

4 回答 4

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 中)

于 2010-05-09T02:36:05.880 回答
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 连接字符串,但它会在需要时获取您的连接字符串。

于 2011-12-21T17:24:58.610 回答
2

你不能——至少不能直接。您需要做的是提取 EF 连接字符串中真正引用数据库的部分 (the provider connection string),并将其放入<connectionStrings>web.config 部分中它自己的条目中:

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

马克

于 2009-07-05T07:04:15.107 回答
0

为此,您可以使用Elmah.Contrib.EntityFramework nuget 包。

(免责声明:我写的)

于 2014-03-13T15:28:11.933 回答