2011-11-11 16 views
29

मैं ELMAH SQL सर्वर डेटाबेस कैसे बना सकता हूं? मैंने इसे NuGet के माध्यम से अपने एएसपी.नेट एमवीसी प्रोजेक्ट में जोड़ा और मेरे मशीन पर एसक्यूएल स्क्रिप्ट नहीं है। https://code.google.com/p/elmah/source/browse/src/Elmah.SqlServer/SQLServer.sqlमैं ELMAH SQL सर्वर डेटाबेस कैसे बना सकता हूं?

भागो कि डेटाबेस पर स्क्रिप्ट आप Elmah के लिए डेटाबेस संरचना बनाने के लिए उपयोग कर रहे हैं:

उत्तर

29

डीडीएल स्क्रिप्ट Elmah downloads page से जुड़ा हुआ है। स्रोत पेड़ को ट्राउल करने की कोई ज़रूरत नहीं है।

(ऐसा क्यों है NuGet के साथ बंडल नहीं कर रहा है मुझे निकल जाता है)

+18

@ ब्रेट्सकी: मैंने अभी 'Elmah.Mvc' प्रोजेक्ट (v2.1.1) स्थापित किया है और यह एक 'App_Readme' फ़ोल्डर या किसी भी डीडीएल स्क्रिप्ट नहीं बनाया। –

+1

यह पृष्ठ अब मौजूद नहीं है :( –

23

मैं स्रोत नियंत्रण में स्क्रिप्ट नहीं मिली।

+1

क्या आप लिंक को ठीक कर सकते हैं और सारांश जोड़ सकते हैं? लिंक-केवल उत्तर कम मूल्य के हैं। –

+0

फ़ाइल अब मौजूद नहीं है! नवीनतम यूआरएल https://bitbucket.org/project-elmah/main/downloads/ELMAH-1.2-db-SQLServer.sql – Wiil

0

एक कोड प्रथम प्रवास के परिदृश्य के लिए, मैं this लेख बहुत उपयोगी पाया।

पहले 'पैकेज प्रबंधक कंसोल' में Add-Migration AddElmah कमांड चलाएं। यह माइग्रेशन फ़ोल्डर के तहत एक फाइल बना देगा। Up() और Down() फ़ंक्शंस के साथ इस फ़ाइल में AddElmah कक्षा होगी। नीचे दिए गए कोड के साथ इन दोनों कार्यों बदला:

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"); 
} 

अब जब आप "पैकेज प्रबंधक कंसोल" में Update-Database आदेश पर अमल करेंगे, ELMAH_Error मेज और संबद्ध प्रक्रियाओं डेटाबेस में बनाया जाएगा।

संबंधित मुद्दे