如何从代码访问elmah数据库?

时间:2015-08-28 18:52:15

标签: database vb.net asp.net-mvc-5 datacontext elmah

VS2013更新4,MVC5,elmah.mvc(与elmah相同),VB / C#

以下代码是标准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访问数据库表。表名&GT; ...

Private db As New ApplicationDbContext

我想编写一些与elmah数据表一起使用的方法,但它与ApplicationContext不同。我不太明白为了设置与elmah表的连接我会写什么,因为我没有真正设置它,它来自elmah的dll。

1 个答案:

答案 0 :(得分:0)

虽然保持错误记录是有道理的,但在开发期间我想清除Elmah日志。虽然对大多数人来说可能是微不足道的,但要弄明白这是一个很好的练习。我已经习惯了先编码,我忘了EF也先做数据库。

在VS2013更新4中,以下向导使此任务变得非常简单。

1)项目&gt;添加新项&gt;数据&gt; ADO.NET实体数据模型

2)给模型一个名字(我用'elmah'创造了很大的创造力)&gt;单击“添加”

3)这是非常酷的地方。我不确定它何时添加,但EF框​​架现在包含一个名为 Code First From Database 的新选项。点击它。

4)选择elmah连接字符串

注意:可以选择在web.config中保存连接设置。这只是创建一个重复的连接字符串。保持检查或不检查,但使用现有的字符串是好的。我没有选择该选项,并且web.config保持不变。但是,不使用该选项意味着必须在上下文定义中更新连接字符串名称&gt;单击“下一步”

5)点击Tables加载Elmah表,保留默认值&gt;单击“完成”

该向导会创建2个文件并将它们放在项目中。一个是由数据表名称命名的,即ELMAH_Error;这是模型。另一个是设置背景的一个新的类。如果选择了保存连接选项,则将修改web.config以添加新的连接字符串。   注意:为方便起见,我将2个类合并为一个文件(可能需要添加一些使用或导入),如果使用现有连接字符串,则必须更新连接字符串名称,如下所示。 / p>

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的方法,该函数返回并从同一页面上的链接访问此方法。

希望这对某人有用。考虑到我经常从这个网站获得的令人敬畏的大师帮助,这是我可以回馈的唯一方式。