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。
答案 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的方法,该函数返回并从同一页面上的链接访问此方法。
希望这对某人有用。考虑到我经常从这个网站获得的令人敬畏的大师帮助,这是我可以回馈的唯一方式。