2015-08-28 27 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表的连接,因为我没有真正设置它,它出现在elmah的dll中。

回答

0

虽然保持错误记录是有道理的,但在开发过程中我想清除Elmah日志。虽然对于大多数人来说可能是微不足道的,但搞清楚这是一个很好的练习。我太习惯于先编码,我忘了EF也先做数据库。

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

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

2)给出的模型的名称(用我用巨大的创造力 'ELMAH')>点击添加

3)这是非常酷的地方。我不确定何时添加它,但EF框​​架现在包含一个名为的新选项,该代码首先来自数据库。点击它。

4)选择ELMAH连接字符串

注:有在web.config中一个选项保存连接设置。这只是创建一个重复的连接字符串。让它选中或不选中,但使用现有的字符串很好。我没有选择该选项,web.config保持不变。不过,不使用该选项意味着连接字符串名称将在上下文定义进行更新>点击下一步

5)单击表加载ELMAH表,保留默认为是>点击Finish

该向导创建2个文件并将它们放置在项目中。一个是由ELMAH_Error的数据表名命名的;这是模型。另一个是设置背景的组合语境。如果保存连接选项被选中,则将修改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方法,该函数返回到我来自同一页面上的链接访问该方法。

希望这对于某人有用。这是考虑到我经常从这个网站获得的真棒指导者帮助的唯一方式。