Вопрос по .net, asp.net, entity-framework – Как использовать строку подключения EntityFramework для Elmah?

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"/>

Итак, как я могу использовать строку подключения EntityFramework в Elmah?

Вау, почему «EF» просто не может использовать тот же формат строки подключения, который мы использовали с тех пор, как? 2002? #потерпеть поражение mxmissile
Да, я имею в виду, что это работает в течение многих лет, зачем менять это правильно? GôTô

Ваш Ответ

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)

Error: User Rate Limit ExceededpasswordError: User Rate Limit Exceeded
Error: User Rate Limit ExceededhowError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Ты можешь использоватьElmah.Contrib.EntityFramework пакет nuget для этой цели.

(Отказ от ответственности: я написал это)

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededctorsError: User Rate Limit ExceededElmahContextError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/3282665/…
Error: User Rate Limit Exceeded
2

Вы не можете - по крайней мере, не напрямую. Вам нужно извлечь часть строки соединения EF, которая действительно ссылается на базу данных (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;

Марк

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, но при необходимости получит строку подключения.

Мне удалось запустить это, но мне пришлось создать правильный конструктор, основанный на конструкторе SqlErrorLog (см.yoda.arachsys.com/csharp/constructors.html - конструкторы не наследуются)
@ G & # XF4; Т & # XF4; все мы знаем правила ctor;) внимание прошу ответить на дату. когда я даю этот код, SqlErrorLog не имеет ctor с параметром, мы говорим о новом elmah SqlErroLog имеет параметр ctor?

Похожие вопросы