Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何创建ELMAH SQL Server数据库?_Asp.net Mvc_Elmah_Nuget - Fatal编程技术网

Asp.net mvc 如何创建ELMAH SQL Server数据库?

Asp.net mvc 如何创建ELMAH SQL Server数据库?,asp.net-mvc,elmah,nuget,Asp.net Mvc,Elmah,Nuget,如何创建ELMAH SQL Server数据库?我通过NuGet将其添加到我的ASP.NET MVC项目中,但我的计算机上没有sql脚本。我在源代码管理中找到了该脚本: 在用于为Elmah创建数据库结构的数据库上运行该脚本。DDL脚本链接自Elmah。不需要拖网源树 (我不明白为什么它没有与NuGet Escape捆绑在一起)对于代码优先迁移场景,我发现这篇文章非常有用 第一次运行“包管理器控制台”中的添加迁移加法命令。这将在迁移文件夹下创建一个文件。此文件将包含带有to函数的AddElmah类

如何创建ELMAH SQL Server数据库?我通过NuGet将其添加到我的ASP.NET MVC项目中,但我的计算机上没有sql脚本。

我在源代码管理中找到了该脚本:


在用于为Elmah创建数据库结构的数据库上运行该脚本。

DDL脚本链接自Elmah。不需要拖网源树


(我不明白为什么它没有与NuGet Escape捆绑在一起)

对于代码优先迁移场景,我发现这篇文章非常有用

第一次运行“包管理器控制台”中的添加迁移加法命令。这将在迁移文件夹下创建一个文件。此文件将包含带有to函数的
AddElmah
Up()
Down()
。将这两个功能替换为以下代码:

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");
}
public override void Up()
{
Sql(@“创建表[dbo]。[ELMAH_错误]
(
[ErrorId]唯一标识符不为空,
[应用程序]NVARCHAR(60)将SQL\u Latin1\u General\u CP1\u CI\u校对为非空,
[主机]NVARCHAR(50)将SQL\u Latin1\u General\u CP1\u CI\u校对为非空,
[Type]NVARCHAR(100)将SQL\u Latin1\u General\u CP1\u CI\u校对为非空,
[来源]NVARCHAR(60)将SQL\u Latin1\u General\u CP1\u CI\u校对为非空,
[消息]NVARCHAR(500)将SQL\u Latin1\u General\u CP1\u CI\u校对为非空,
[用户]NVARCHAR(50)将SQL\u Latin1\u General\u CP1\u CI\u校对为非空,
[StatusCode]INT不为空,
[TimeUtc]日期时间不为空,
[Sequence]整数标识(1,1)不为空,
[AllXml]NTEXT将SQL\u Latin1\u General\u CP1\u CI\u校对为非空
) ");
Sql(“EXEC('ALTER TABLE[dbo].[ELMAH_Error]带NOCHECK ADD CONSTRAINT[PK_ELMAH_Error]主键([ErrorId])”);
Sql(“EXEC('ALTER TABLE[dbo].[ELMAH_Error]ADD CONSTRAINT[DF_ELMAH_Error\u ErrorId]DEFAULT(NEWID())FOR[ErrorId]”);
Sql(@“EXEC('在[dbo]上创建非聚集索引[IX_ELMAH_Error\u App_Time_Seq]。[ELMAH_Error]
(
[应用]ASC,
[TimeUtc]DESC,
[顺序]描述
)')");
Sql(@“EXEC('CREATE PROCEDURE[dbo].[ELMAH_GetErrorXml](@Application NVARCHAR(60),@ErrorId UNIQUEIDENTIFIER))作为
不计较
从[ELMAH_Error]中选择[AllXml],其中[ErrorId]=@ErrorId和[Application]=@Application');
Sql(@“EXEC('CREATE PROCEDURE[dbo].[ELMAH_GetErrorsXml]
(@Application-NVARCHAR(60),@PageIndex INT=0,@PageSize INT=15,@TotalCount INT-OUTPUT)
作为
不计较
声明@FirstTimeUTC日期时间
声明@FirstSequence INT
声明@StartRow INT
声明@StartRowIndex INT
从[ELMAH_Error]中选择@TotalCount=COUNT(1),其中[Application]=@Application
设置@StartRowIndex=@PageIndex*@PageSize+1

如果@StartRowIndexElmah source已移动到GitHub。SQL Server的当前文件位于Elmah组织下的SqlErrorLog repo中。


通过搜索Elmah GitHub组织下的
errorlog
可以找到其他数据库脚本。例如

@Brettski:我刚刚安装了
Elmah.Mvc
项目(v2.1.1),它没有创建
App_Readme
文件夹或任何ddl脚本。此页面不再存在:(源代码已移动到GitHub。请参阅我的。您能修复链接并添加摘要吗?仅链接的答案没有什么价值。文件不再存在!最新的url是源代码已移动到GitHub。请参阅我的。为什么PK位于使用newid()而不是newsequentialid()的guid列上)我无法理解。应该在序列列上,不是吗?我走了一英里远,使用一个带有fluent映射的POCO为表生成迁移数据。稍微复杂一点,但也允许直接使用EF查询表。