【问题标题】:Inserting an entity through Entity Framework to a table having default value column通过实体框架将实体插入到具有默认值列的表中
【发布时间】:2013-05-28 15:32:44
【问题描述】:

一个简单的情况,但想不出简单的解决方案。
我的 MSSQL DB 中有一张表(简化版):
tbUsers

[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](25) NOT NULL,
[DateCreated] [datetime2](7) NOT NULL default GETDATE()

我有一个从数据库生成的实体框架模型,它为我创建了一个用户 POCO 类。
我想要实现的是,当像这样使用我的数据库上下文时

db.Users.Add(new User { Name = "Rony" });  
db.SaveChanges();

它将创建一行,其中 DateCreated 设置为当前的日期和时间。现在发生的情况是,当创建User 对象时,DateCreated 属性默认为DateTime.MinValue,然后数据库中的行也具有此值。

我猜执行的查询是:

INSERT INTO dbo.tbUsers
       ([Name]
       ,[DateCreated])
VALUES
       (''
       ,'0001-01-01 00:00:00.0000000')

但应该是:

INSERT INTO dbo.tbUsers
       ([Name])
VALUES
       ('')

我们将不胜感激。

【问题讨论】:

    标签: .net sql-server entity-framework


    【解决方案1】:

    如果您的数据库负责设置字段,请将属性注释为Computed,例如

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    

    这也可以在 EF 设计器中对该字段的属性进行设置。

    【讨论】:

    • 谢谢。这是我正在寻找的方向,但遗憾的是,当我想更新记录并将 DateCreated 设置为其他内容时,它并不能解决问题。我知道此示例中的 DateCreated 不应更新,但例如让我们考虑一个“IsVerified”列,该列在创建时默认为 false,但将来可能会在通过电子邮件验证用户时更改为 true。跨度>
    猜你喜欢
    • 2017-03-29
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多