Вопрос по .net, asp.net, entity-framework – Как использовать строку подключения EntityFramework для 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="Data Source=(Local);Initial Catalog=...;User Id=...;Password=...;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/>
Итак, как я могу использовать строку подключения EntityFramework в Elmah?
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)
Ты можешь использоватьElmah.Contrib.EntityFramework пакет nuget для этой цели.
(Отказ от ответственности: я написал это)
ElmahContext
Error: User Rate Limit Exceeded
Вы не можете - по крайней мере, не напрямую. Вам нужно извлечь часть строки соединения 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;
Марк
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, но при необходимости получит строку подключения.