2011-11-11 98 views

回答

29

DDL腳本鏈接從Elmah downloads page。無需拖動源樹。

(爲什麼它沒有用的NuGet捆綁逃脫我)

+18

@Brettski:我剛安裝了'Elmah.Mvc'項目(v2.1.1),它沒有創建'App_Readme'文件夾或任何ddl腳本。 –

+1

此頁不再存在:( –

0

有關代碼第一遷移方案,我發現this文章非常有幫助。

首先運行'包管理器控制檯'中的Add-Migration AddElmah命令。這將在Migration文件夾下創建一個文件。該文件將包含AddElmah類和函數Up()Down()。下面的代碼替換這兩個功能:當你將在「包管理器控制檯」執行Update-Database命令

public override void Up() 
{ 
    Sql(@"CREATE TABLE [dbo].[ELMAH_Error] 
     (
      [ErrorId]  UNIQUEIDENTIFIER NOT NULL, 
      [Application] NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
      [Host]  NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
      [Type]  NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
      [Source]  NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
      [Message]  NVARCHAR(500) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
      [User]  NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
      [StatusCode] INT NOT NULL, 
      [TimeUtc]  DATETIME NOT NULL, 
      [Sequence] INT IDENTITY(1, 1) NOT NULL, 
      [AllXml]  NTEXT COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
     ) "); 

    Sql("EXEC('ALTER TABLE [dbo].[ELMAH_Error] WITH NOCHECK ADD CONSTRAINT[PK_ELMAH_Error] PRIMARY KEY([ErrorId])')"); 

    Sql("EXEC('ALTER TABLE [dbo].[ELMAH_Error] ADD CONSTRAINT[DF_ELMAH_Error_ErrorId] DEFAULT(NEWID()) FOR[ErrorId]')"); 

    Sql(@"EXEC('CREATE NONCLUSTERED INDEX [IX_ELMAH_Error_App_Time_Seq] ON [dbo].[ELMAH_Error] 
     (
      [Application] ASC, 
      [TimeUtc]  DESC, 
      [Sequence]  DESC 
     )')"); 

    Sql(@"EXEC('CREATE PROCEDURE [dbo].[ELMAH_GetErrorXml] (@Application NVARCHAR(60), @ErrorId UNIQUEIDENTIFIER) AS 
      SET NOCOUNT ON 
      SELECT [AllXml] FROM [ELMAH_Error] WHERE [ErrorId] = @ErrorId AND [Application] = @Application')"); 

    Sql(@"EXEC('CREATE PROCEDURE [dbo].[ELMAH_GetErrorsXml] 
     (@Application NVARCHAR(60), @PageIndex INT = 0, @PageSize INT = 15, @TotalCount INT OUTPUT) 
     AS 
      SET NOCOUNT ON 
      DECLARE @FirstTimeUTC DATETIME 
      DECLARE @FirstSequence INT 
      DECLARE @StartRow INT 
      DECLARE @StartRowIndex INT 

      SELECT @TotalCount = COUNT(1) FROM [ELMAH_Error] WHERE [Application] = @Application 

      SET @StartRowIndex = @PageIndex * @PageSize + 1 

      IF @StartRowIndex <= @TotalCount 
      BEGIN 
       SET ROWCOUNT @StartRowIndex 

       SELECT @FirstTimeUTC = [TimeUtc], @FirstSequence = [Sequence] FROM [ELMAH_Error] 
       WHERE [Application] = @Application ORDER BY [TimeUtc] DESC, [Sequence] DESC 
      END 
      ELSE 
      BEGIN 
       SET @PageSize = 0 
      END 

      SET ROWCOUNT @PageSize 

      SELECT 
       errorId  = [ErrorId], 
       application = [Application], 
       host  = [Host], 
       type  = [Type], 
       source  = [Source], 
       message  = [Message], 
       [user]  = [User], 
       statusCode = [StatusCode], 
       time  = CONVERT(VARCHAR(50), [TimeUtc], 126) + ''Z'' 
      FROM [ELMAH_Error] error WHERE [Application] = @Application AND [TimeUtc] <= @FirstTimeUTC 
      AND [Sequence] <= @FirstSequence ORDER BY [TimeUtc] DESC, [Sequence] DESC FOR XML AUTO')"); 

    Sql(@"EXEC('CREATE PROCEDURE [dbo].[ELMAH_LogError] (@ErrorId UNIQUEIDENTIFIER, @Application NVARCHAR(60), @Host NVARCHAR(30), 
      @Type NVARCHAR(100), @Source NVARCHAR(60), @Message NVARCHAR(500), @User NVARCHAR(50), @AllXml NTEXT, @StatusCode INT, 
      @TimeUtc DATETIME) AS 

     SET NOCOUNT ON 

     INSERT INTO [ELMAH_Error] ([ErrorId], [Application], [Host], [Type], [Source], [Message], [User], [AllXml], [StatusCode], [TimeUtc]) 
     VALUES (@ErrorId, @Application, @Host, @Type, @Source, @Message, @User, @AllXml, @StatusCode, @TimeUtc)')"); 
} 

public override void Down() 
{ 
    Sql("EXEC('DROP PROCEDURE [ELMAH_GetErrorXml]')"); 
    Sql("EXEC('DROP PROCEDURE [ELMAH_GetErrorsXml]')"); 
    Sql("EXEC('DROP PROCEDURE [ELMAH_LogError]')"); 
    Sql("Drop table ELMAH_Error"); 
} 

現在,ELMAH_Error表和相關程序將在數據庫中創建。

相關問題