gpt4 book ai didi

c# - Entity Framework 为数据库中默认定义的 NOT NULL 列生成值

转载 作者:太空狗 更新时间:2023-10-29 21:06:45 26 4
gpt4 key购买 nike

嗨,我有一张 table 客户。表中的一列是 DateCreated。此列为 NOT NULL,但在 db 中为此列定义了默认值。

当我从我的代码中使用 EF4 添加新的 Customer 时。

var customer = new Customer();
customer.CustomerName = "Hello";
customer.Email = "hello@ello.com";
// Watch out commented out.
//customer.DateCreated = DateTime.Now;
context.AddToCustomers(customer);
context.SaveChanges();

以上代码生成以下查询。

exec sp_executesql N'insert [dbo].[Customers]([CustomerName], 
[Email], [Phone], [DateCreated], [DateUpdated])
values (@0, @1, null, @2, null)
select [CustomerId]
from [dbo].[Customers]
where @@ROWCOUNT > 0 and [CustomerId] = scope_identity()
',N'@0 varchar(100),@1 varchar(100),@2 datetime2(7)
',@0='Hello',@1='hello@ello.com',@2='0001-01-01 00:00:00'

并抛出以下错误

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.

您能告诉我在数据库级别具有默认值的 NOT NULL 列为什么不应该具有 EF 生成的值吗?

数据库:

DateCreated DATETIME NOT NULL

EF 中的 DateCreated 属性:

  • 可为空:为假
  • Getter/Setter:公共(public)
  • 类型:日期时间
  • 默认值:

谢谢。

最佳答案

根据我对 EF 的了解(最少),它不会从架构中获取默认值。您插入的行和列被标记为 NOT NULL 这一事实意味着 EF 认为它应该为恰好具有 DateTime.MinValue 值的该列插入一个值。

您可能需要在实体构造函数中强制使用您自己的值或创建一些工厂方法。

EF 中表设计器的属性页上是否有任何内容可让您指定默认值?

关于c# - Entity Framework 为数据库中默认定义的 NOT NULL 列生成值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com