如何从代码访问 elmah 数据库?
How do I access the elmah database from code?
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访问数据库tables。< tablename>...:[=13=]
Private db As New ApplicationDbContext
我想编写一些方法来处理 elmah 数据 table 但它与 ApplicationContext 是不同的上下文。我不太明白我会写什么来设置与 elmah 的连接 table,因为我并没有真正设置它,它出现在 elmah 的 dll 中。
虽然保留错误记录是有道理的,但在开发过程中我想清除 Elmah 日志。虽然对大多数人来说可能微不足道,但这是一个很好的练习。我太习惯先编码了,我忘了 EF 也先做数据库。
在 VS2013 更新 4 中,以下向导使这项任务变得非常简单。
1) 项目 > 添加新项 > 数据 > ADO.NET 实体数据模型
2) 给模型起个名字(创意十足的我用了'elmah') > 点击Add
3) 这是非常酷的地方。我不确定它是何时添加的,但 EF 框架现在包含一个名为 Code First From Database 的新选项。点击那个。
4) Select elmah 连接字符串
注意:在 web.config 中有一个 保存连接设置的选项。这只会创建一个重复的连接字符串。保持选中状态或不选中状态,但使用现有字符串就可以了。我没有 select 这个选项, web.config 没有动过。但是,不使用该选项意味着必须在上下文定义中更新连接字符串名称 > 单击下一步
5) 单击 Tables 加载 Elmah table,保留默认值 > 单击 Finish
向导创建 2 个文件并将它们放入项目中。一个是用数据table命名的,名字是ELMAH_Error;这是模型。另一个是设置上下文的parita class。如果 保存连接 选项被 select 编辑,那么 web.config 将被修改以添加新的连接字符串。
注意:为方便起见,我将 2 类 合并到一个文件中(可能需要添加一些 Using 或 Imports),而 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 的方法,函数 returns 到我从同一页面上的 link 访问此方法。
希望这对某人有用。考虑到我经常从这个网站得到的很棒的专家帮助,这是我可以回馈的唯一方式。
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访问数据库tables。< tablename>...:[=13=]
Private db As New ApplicationDbContext
我想编写一些方法来处理 elmah 数据 table 但它与 ApplicationContext 是不同的上下文。我不太明白我会写什么来设置与 elmah 的连接 table,因为我并没有真正设置它,它出现在 elmah 的 dll 中。
虽然保留错误记录是有道理的,但在开发过程中我想清除 Elmah 日志。虽然对大多数人来说可能微不足道,但这是一个很好的练习。我太习惯先编码了,我忘了 EF 也先做数据库。
在 VS2013 更新 4 中,以下向导使这项任务变得非常简单。
1) 项目 > 添加新项 > 数据 > ADO.NET 实体数据模型
2) 给模型起个名字(创意十足的我用了'elmah') > 点击Add
3) 这是非常酷的地方。我不确定它是何时添加的,但 EF 框架现在包含一个名为 Code First From Database 的新选项。点击那个。
4) Select elmah 连接字符串
注意:在 web.config 中有一个 保存连接设置的选项。这只会创建一个重复的连接字符串。保持选中状态或不选中状态,但使用现有字符串就可以了。我没有 select 这个选项, web.config 没有动过。但是,不使用该选项意味着必须在上下文定义中更新连接字符串名称 > 单击下一步
5) 单击 Tables 加载 Elmah table,保留默认值 > 单击 Finish
向导创建 2 个文件并将它们放入项目中。一个是用数据table命名的,名字是ELMAH_Error;这是模型。另一个是设置上下文的parita class。如果 保存连接 选项被 select 编辑,那么 web.config 将被修改以添加新的连接字符串。 注意:为方便起见,我将 2 类 合并到一个文件中(可能需要添加一些 Using 或 Imports),而 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 的方法,函数 returns 到我从同一页面上的 link 访问此方法。
希望这对某人有用。考虑到我经常从这个网站得到的很棒的专家帮助,这是我可以回馈的唯一方式。