Last active
December 14, 2018 11:12
-
-
Save theuntitled/fc68909a9e5e26ffcc1a to your computer and use it in GitHub Desktop.
Elmah v1.2 POCO and Code First Migration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Data.Entity; | |
using ProjectName.Models; | |
namespace ProjectName { | |
public class DataContext : DbContext { | |
internal DbSet<ElmahError> ElmahErrors { get; set; } | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.ComponentModel.DataAnnotations; | |
using System.ComponentModel.DataAnnotations.Schema; | |
namespace ProjectName.Models { | |
[Table( "ELMAH_Error" )] | |
internal class ElmahError { | |
[DatabaseGenerated( DatabaseGeneratedOption.Identity )] | |
public int Sequence { get; set; } | |
[Key] | |
public Guid ErrorId { get; set; } | |
[Required] | |
[MaxLength( 60 )] | |
public string Application { get; set; } | |
[Required] | |
[MaxLength( 50 )] | |
public string Host { get; set; } | |
[Required] | |
[MaxLength( 100 )] | |
public string Type { get; set; } | |
[Required] | |
[MaxLength( 60 )] | |
public string Source { get; set; } | |
[Required] | |
[MaxLength( 500 )] | |
public string Message { get; set; } | |
[Required] | |
[MaxLength( 50 )] | |
public string User { get; set; } | |
public int StatusCode { get; set; } | |
public DateTime TimeUtc { get; set; } | |
[Required] | |
public string AllXml { get; set; } | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Data.Entity.Migrations; | |
namespace ProjectName.Migrations { | |
public partial class ElmahErrors : DbMigration { | |
public override void Up() { | |
CreateTable( | |
"dbo.ELMAH_Error" , | |
c => new { | |
ErrorId = c.Guid( false ) , | |
Sequence = c.Int( false , true ) , | |
Application = c.String( false , 60 ) , | |
Host = c.String( false , 50 ) , | |
Type = c.String( false , 100 ) , | |
Source = c.String( false , 60 ) , | |
Message = c.String( false , 500 ) , | |
User = c.String( false , 50 ) , | |
StatusCode = c.Int( false ) , | |
TimeUtc = c.DateTime( false ) , | |
AllXml = c.String( false ) , | |
} ).PrimaryKey( t => t.ErrorId , "PK_ELMAH_Error" , false ); | |
Sql( "ALTER TABLE dbo.ELMAH_Error ADD CONSTRAINT [DF_ELMAH_Error_ErrorId] DEFAULT (newid()) FOR [ErrorId]" ); | |
Sql( | |
"CREATE NONCLUSTERED INDEX [IX_ELMAH_Error_App_Time_Seq] ON [dbo].[ELMAH_Error] ( [Application] ASC, [TimeUtc] DESC, [Sequence] DESC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]" ); | |
Sql( @" | |
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 | |
-- Get the ID of the first error for the requested page | |
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 | |
-- Now set the row count to the requested page size and get | |
-- all records below it for the pertaining application. | |
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( @" | |
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( @" | |
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( "DROP PROCEDURE [dbo].[ELMAH_GetErrorsXml]" ); | |
Sql( "DROP PROCEDURE [dbo].[ELMAH_GetErrorXml]" ); | |
Sql( "DROP PROCEDURE [dbo].[ELMAH_LogError]" ); | |
Sql( "DROP INDEX [IX_ELMAH_Error_App_Time_Seq] ON dbo.ELMAH_Error WITH ( ONLINE = OFF )" ); | |
Sql( "ALTER TABLE dbo.ELMAH_Error DROP CONSTRAINT [DF_ELMAH_Error_ErrorId]" ); | |
DropTable( "dbo.ELMAH_Error" ); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment