【问题标题】:Inserting datetime value into the database with EF-CodeFirst seed data使用 EF-Code First 种子数据将日期时间值插入数据库
【发布时间】:2017-07-17 17:13:10
【问题描述】:

我正在尝试为我的数据库添加一些数据。我得到的错误是在布尔值和日期字段上。以下是用于为数据库播种的示例种子数据。我做错了什么?

 Sql("INSERT INTO USERS (Id,FirstName,LastName,Email,RefIndicator,TeamId,IsRegistered,DateRegistered,LastModified,UserRolesId) VALUES (1, 'SomeFirstName', 'SomeSurName', 'name@somedomainname.com', 'IMT/iTC22', 1, True, convert(datetime, '17/07/2017 17:56:25'), null, 1)");
 Sql("INSERT INTO USERS (Id,FirstName,LastName,Email,RefIndicator,TeamId,IsRegistered,DateRegistered,LastModified,UserRolesId) VALUES (2, 'SomeFirstName', 'SomeSurName', 'name@somedomainname.com', 'IMT/iTC22', 1, True, convert(datetime, '17/07/2017 17:56:25'), null, 2)");
 Sql("INSERT INTO USERS (Id,FirstName,LastName,Email,RefIndicator,TeamId,IsRegistered,DateRegistered,LastModified,UserRolesId) VALUES (3, 'SomeFirstName', 'SomeSurName', 'name@somedomainname.com', 'IMT/iTC22', 1, True, convert(datetime, '17/07/2017 17:56:25'), null, 3)");

下面是我需要填充种子数据的表结构

CREATE TABLE [dbo].[Users] (
                        [Id]             TINYINT        NOT NULL,
                        [FirstName]      NVARCHAR (MAX) NULL,
                        [LastName]       NVARCHAR (MAX) NULL,
                        [Email]          NVARCHAR (MAX) NULL,
                        [RefIndicator]   NVARCHAR (MAX) NULL,
                        [TeamId]         TINYINT        NOT NULL,
                        [IsRegistered]   BIT            NOT NULL,
                        [DateRegistered] DATETIME       NOT NULL,
                        [LastModified]   DATETIME       NULL,
                        [UserRolesId]    TINYINT        DEFAULT ((0)) NOT NULL,
                        CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED ([Id] ASC),
                        CONSTRAINT [FK_dbo.Users_dbo.Teams_TeamId] FOREIGN KEY ([TeamId]) REFERENCES [dbo].[Teams] ([Id]) ON DELETE CASCADE,
                        CONSTRAINT [FK_dbo.Users_dbo.UserRoles_UserRolesId] FOREIGN KEY ([UserRolesId]) REFERENCES [dbo].[UserRoles] ([Id]) ON DELETE CASCADE
                    );


                    GO
                    CREATE NONCLUSTERED INDEX [IX_TeamId]
                        ON [dbo].[Users]([TeamId] ASC);


                    GO
                    CREATE NONCLUSTERED INDEX [IX_UserRolesId]
                        ON [dbo].[Users]([UserRolesId] ASC);      

【问题讨论】:

  • True 不是数据库类型。您应该有一个bit 列,并为true 发送1,或者为false 发送0
  • @krillgar 让他们在此处添加表结构,以便您了解我来自哪里
  • @krillgar 我已经更新了问题以反映表格结构

标签: c# entity-framework asp.net-mvc-4


【解决方案1】:

您正在尝试将值 True 插入到类型为 bitIsRegistered 列中。您正在执行脚本字符串,因此不会发送 true 的 C# 布尔值,而是发送未包含在单引号中的字符串 True。这就是为什么两个值都会引发错误。

在你的字符串中用1替换你的True,你会没事的。

【讨论】:

    【解决方案2】:

    我用下面的代码成功地为数据库播种

            Sql("INSERT INTO USERS (Id,FirstName,LastName,Email,RefIndicator,TeamId,IsRegistered,DateRegistered,LastModified,UserRolesId) VALUES (1, 'SampleName', 'SampleSurname', 'someNames@nnxg.com', 'IMT/iTC22', 1, 'True', GETDATE(), null, 1)");
            Sql("INSERT INTO USERS (Id,FirstName,LastName,Email,RefIndicator,TeamId,IsRegistered,DateRegistered,LastModified,UserRolesId) VALUES (2, 'SampleName', 'SampleSurname', 'someNames@nnxg.com', 'IMT/iTC22', 1, 'True', GETDATE(), null, 2)");
            Sql("INSERT INTO USERS (Id,FirstName,LastName,Email,RefIndicator,TeamId,IsRegistered,DateRegistered,LastModified,UserRolesId) VALUES (3, 'SampleName', 'SampleSurname', 'someNames@nnxg.com', 'IMT/iTC22', 1, 'True', GETDATE(), null, 3)");
    

    我将 True 的字符串值更改为布尔值“True”,并使用 GETDATE() 函数将当前日期时间值插入数据库。我从post 中获取了日期解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2019-10-06
      • 2011-02-28
      相关资源
      最近更新 更多