我正在使用EF 6,Database First(edmx),我已经定义了一个具有NON NULLABLE字段的表,该字段具有定义的默认值。当我使用EF插入新记录时,我收到错误...
"Cannot insert the value NULL into column attr_is_required ... "
这是表格定义......
CREATE TABLE [Auth].[AppAttributes]
(
[app_attr_id] BIGINT NOT NULL PRIMARY KEY IDENTITY,
[app_id] BIGINT NOT NULL,
[attr_name] NVARCHAR(50) NOT NULL,
[attr_description] NVARCHAR(MAX) NULL,
[attr_type] NVARCHAR(50) NOT NULL,
[attr_is_required] BIT DEFAULT (0) NOT NULL,
[created_date] DATETIME DEFAULT (getdate()) NOT NULL,
[created_by] NVARCHAR (50) DEFAULT ('db') NOT NULL,
[updated_date] DATETIME DEFAULT (getdate()) NOT NULL,
[updated_by] NVARCHAR (50) DEFAULT ('db') NOT NULL,
)
这是用于添加记录的C#。您会注意到我根本没有指定 attr_is_required 。
uow.DbContext.AppAttributes.Add( new AppAttribute
{
app_id = adminApp.app_id,
attr_description = "User's Date of Birth",
attr_name = "DateOfBirth",
attr_type = AppAttributeTypes.DATE.ToString(),
created_by = UnitTestSvc.CREATED_BY,
created_date = DateTime.Now,
updated_by = UnitTestSvc.UPDATED_BY,
updated_date = DateTime.Now
});
我已经设法记录EF生成的SQL。
INSERT [Auth].[AppAttributes]([app_id], [attr_name], [attr_description], [attr_type], [attr_is_required], [created_date], [created_by], [updated_date], [updated_by])
VALUES (@0, @1, @2, @3, NULL, @4, @5, @6, @7)
我注意到NULL值明确地分配给 attr_is_required 列。我在某处读到,从INSERT语句中删除此字段将允许使用默认值。问题是EF生成被EF抽象掉了。我不知道是什么,如果有的话 我可以做到这一点吗?我想如果必须的话,我可以明确提供价值,但似乎不应该要求我提供它。
有没有人知道解决这个问题的方法?
重复?
引用文章正在处理代码优先的方法,其中我使用数据库优先和可视化设计器。话虽如此,这篇文章确实激励我去看一些让我找到解决方案的东西。
解
在可视化设计器(EDMX文件)中,我在 AppAttribute 对象上选择了 attr_is_required 属性。在属性窗格中,我注意到" Nullable"的设置。将此设置为FALSE似乎已解决了我的问题。