我正在将 Simple Membership 数据库迁移到 Identity 2.0。我正在将一CreateDate datetime NULL
列复制到一CreateDate datetime NOT NULL
列。我检查了数据源表中 Membership.CreateDate 列中的所有记录,以验证它们是否包含有效的 DateTimes。返回此错误:
Cannot insert the value NULL into column 'CreateDate', table 'Settlement.dbo.AspNetUsers'; column does not allow nulls. INSERT fails.
The statement has been terminated.
我还尝试删除 Membership 中的所有记录,但只有一个(其 CreateDate 列包含2012-12-27 01:35:03.610
)。我犯了同样的错误。
我在 SSMS 中运行脚本。
迁移脚本摘录:
CREATE TABLE [dbo].[AspNetUsers] (
[Id] [nvarchar](60) NOT NULL,
[UserName] [nvarchar](15) NOT NULL,
[AcId] INT NOT NULL,
[LocId] INT NOT NULL,
[CreateDate] [datetime] NOT NULL,
[Email] [nvarchar](60),
[EmailConfirmed] [bit] Default ((0)) NOT NULL,
[PasswordHash] [nvarchar] (100),
[SecurityStamp] [nvarchar] (60),
[PhoneNumber] [nvarchar] (15),
[PhoneNumberConfirmed] [bit] Default ((0)) NOT NULL,
[TwoFactorEnabled] [bit] Default ((0)) NOT NULL,
[LockoutEndDateUtc] [datetime],
[LockoutEnabled] [bit] Default ((0)) NOT NULL,
[AccessFailedCount] [int] Default ((0)) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY ([Id])
);
GO
INSERT INTO AspNetUsers(Id, UserName, AcId, LocId, PasswordHash, SecurityStamp, CreateDate )
SELECT UserProfile.UserId, UserProfile.UserName, UserProfile.BaId, UserProfile.OfcId,
webpages_Membership.Password, webpages_Membership.PasswordSalt, webpages_Membership.CreateDate
FROM UserProfile
LEFT OUTER JOIN webpages_Membership ON UserProfile.UserId = webpages_Membership.UserId
GO
如果我将 AspNetUsers CreateDate 列更改为 NULL,它会成功地将日期时间从表复制到表,因此我知道所有列名和类型都是正确的。(这样做后我跑了
ALTER TABLE [dbo].[AspNetUsers] ALTER COLUMN [CreateDate] datetime NOT NULL
,得到了同样的错误)
这发生在数据库的生产副本中。我有一个通过相同的 EF 代码优先代码生成的数据库的开发副本,它成功地将数据复制到 CreateDate NOT NULL 字段中。
在这一点上,我束手无策。Cannot insert the value NULL into column
当源数据是有效的日期时间时,为什么会出现错误?或者为什么它不将 CreateDate 列数据识别为有效的日期时间?