2015-08-28 3 views
0

обновление VS2013 4, MVC5, elmah.mvc (такой же, как Elmah), VB/C#Как получить доступ к базе данных elmah из кода?

Следующий код является частью стандартного шаблона MVC, чтобы начать работу, и она является частью создания нашего соединения с базой данных из кода для доступа к базе данных SQL:

Public Class ApplicationDbContext 
    Inherits IdentityDbContext(Of ApplicationUser) 
    Public Sub New() 
    MyBase.New("DefaultConnection", throwIfV1Schema:=False) 
    Me.Configuration.LazyLoadingEnabled = True 
    End Sub 

    Public Shared Function Create() As ApplicationDbContext 
    Return New ApplicationDbContext() 
    End Function 

Нам также необходимо следующее или что-то подобное в web.config:

<configuration> 
    <connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=mypc\SQLEXPRESS;Initial Catalog=mydb.DefaultContext;Integrated Security=True" providerName="System.Data.SqlClient" /> 
    <add name="ElmahConnection" connectionString="Data Source=mypc\SQLEXPRESS;Initial Catalog=mydb.elmah;Integrated Security=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

Я добавил строку подключения ELMAH, как это имеет отношение к моему вопросу.

Затем в каждом месте, где необходимо, добавляется следующее определение, и мы можем получить доступ к таблицам базы данных, используя db. < имя_таблицы> ...:

Private db As New ApplicationDbContext 

Я хочу написать некоторые методы работы с и на столе ELMAH данных, но это другой контекст, чем ApplicationContext. Я не совсем понимаю, что я написал бы, чтобы установить соединение с таблицей elmah, так как я этого не делал, он появился в dll для elmah.

ответ

0

Сохранение записей ошибок имеет смысл, во время разработки я хотел очистить журнал Elmah. Хотя, вероятно, это было тривиально для большинства, это было хорошее упражнение, чтобы понять это. Я был так привык кодоваться первым, я забыл, что EF также делает базу данных в первую очередь.

В обновлении VS2013 4 следующий мастер выполнил эту задачу довольно легко.

1) Проект> Добавить Элемент> Данные> ADO.NET Entity Data Model

2) Дайте моделируют имя (С большим творчеством я использовал 'Elmah')> Нажмите кнопку Добавить

3) Здесь все становится довольно круто. Я не уверен, когда он был добавлен, но в рамки EF теперь включен новый выбор: Код First From Database. Нажмите на это.

4) Выберите строку подключения ELMAH

Примечание: Существует возможность сохранения настроек соединения в web.config. Это просто создает повторяющуюся строку соединения. Оставьте его отмеченным или нет, но использование существующей строки в порядке. Я не выбрал вариант, и web.config остался нетронутым. Тем не менее, не с помощью этой опции означает имя строки соединения должны быть обновлены в определении контекста> Нажмите кнопку Далее

5) Нажмите на таблицы, чтобы загрузить таблицу Elmah, оставьте значения по умолчанию, как это> Нажмите кнопку Готово

Мастер создает 2 файла и помещает их в проект. Один из них называется именем таблицы данных, которое является ELMAH_Error; это модель. Другой - это класс parital, который устанавливает контекст. Если выбрано значение , укажите вариант подключения, а затем изменится web.config, чтобы добавить новую строку подключения. Примечание: я объединил 2 класса в один файл для удобства (может потребоваться добавить некоторые операции с использованием или импортом), а Public Sub New() - это то, где имя строки подключения должно быть обновлено, если используется существующая строка соединения, как показано ниже.

Partial Public Class elmah 
    Inherits DbContext 

    Public Sub New() 
    MyBase.New("name=ElmahConnection") 
    End Sub 

    Public Overridable Property ELMAH_Error As DbSet(Of ELMAH_Error) 

    Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder) 
    End Sub 
End Class 

6) Со всем, что делается автоматически (для имени строки соединения, за исключением, если это необходимо), все, что требуется, чтобы написать нужный код. Я хотел, чтобы очистить журнал Elmah время от времени и использовали следующее:

Public Class ErrorController 
    Inherits Controller 

    Private db1 As New elmah 

Function DeleteElmahRecords() As ActionResult 

    Dim elmahTable = db1.ELMAH_Error.ToList() 
    db1.ELMAH_Error.RemoveRange(elmahTable) 
    db1.SaveChanges() 

    Return RedirectToAction("ErrorTesting") 
End Function 
… 
End Class 

Очевидно, у меня есть метод, называемый ErrorTesting, что функция возвращает к и я этот метод по ссылке на той же странице.

Надеюсь, это полезно для кого-то. Это своего рода единственный способ, который я могу вернуть, учитывая огромную помощь гуру, которую я часто получаю с этого сайта.

 Смежные вопросы

  • Нет связанных вопросов^_^