gpt4 book ai didi

datetime - 在 Code-First Entity Framework 和 SQL Server 中使用 DateTime 属性

转载 作者:行者123 更新时间:2023-12-02 14:48:36 25 4
gpt4 key购买 nike

我有一个示例类book:

public class Book
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public DateTime DateAdded { get; set; }
}

当我尝试将新的 book 添加到 BookDb 上下文时...

using (BookDb db = new BookDb())
{
Book book = new Book {
Name = "Some name",
DateAdded = DateTime.Now
};

db.Books.Add(book);
db.SaveChanges();
}

...抛出错误:

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

<小时/>

我发现造成此问题的原因是 .NET 和 SQL Server 之间的 datetime 类型不兼容。有一种方法可以告诉 EF 在传统 Entity Framework 中使用 SQL Server 的格式,但是如何在代码优先 Entity Framework 中做到这一点?

我在 .NET 4(MVC 3 Web 应用程序)和 SQL Server 2008 Express 上使用 EF4。

最佳答案

您可以在 Fluent API 中指定类型:

modelBuilder.Entity<Book>()
.Property(f => f.DateTimeAdded)
.HasColumnType("datetime2");

这会在数据库中创建一个 datetime2(7) 列。如果您想微调精度,可以使用:

modelBuilder.Entity<Book>()
.Property(f => f.DateTimeAdded)
.HasColumnType("datetime2")
.HasPrecision(0);

...数据库中的 datetime2(0) 列。

但是,您在问题中显示的代码是有效的,因为 datetime 类型允许存储早至 1750 年左右的日期。该异常仅发生在更早的日期。此异常的一个常见原因是未初始化的 DateTime 属性,因为它代表年份 0001,无法存储在 SQL Server 中的 datetime 列中。

没有相应的属性可以用数据注释来定义它。这只能通过 Fluent API 实现。

关于datetime - 在 Code-First Entity Framework 和 SQL Server 中使用 DateTime 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043816/

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