EF返回"无法插入NULL" ...但是列定义了默认值

时间:2018-04-07 21:52:14

标签: c# sql-server entity-framework

我正在使用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似乎已解决了我的问题。

0 个答案:

没有答案