1

我在使用 EF 在数据库中保存日期值时遇到问题。

在我的 C# 代码中,我的日期定义为:

DateTime ed = DateTime.Now.AddMonths(+6);

在 SQL Server 中,该date列定义为DateTime. 日期按YYYY/MM/DD格式排序,没有时间。

当我尝试使用以下代码在数据库中插入值时:

t_a m = new t_a();
m.dbDate = DateTime.Today;
entity.AddTot_a(m);
entity.SaveChanges();

我收到以下错误消息:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。

我相信这是因为该值显示为MM/DD/YYY: HH:MM:SS,而在数据库中它另存为YYY/DD/MM。我该如何解决这个问题?

4

2 回答 2

1

SQL Server 不DateTime以任何字符串格式存储 a - 它存储为 8 字节数值。所以字符串格式不是问题。

另外:您一直在使用 .NET DateTime- 这就是这样做的方法,因此此错误的原因一定是其他原因。

从错误信息猜测,我想你可能有这种情况:

  • 您正在针对 SQL Server 2008(或 2008 R2 或 2012)版本数据库开发EF 模型

  • 您正在针对 SQL Server 2005数据库运行应用程序

问题是:如果您对 2008(或更新的)数据库使用 EF 建模工具,它将默认使用DATETIME2“日期”数据类型 - 但 SQL Server 2005没有该数据类型。

您需要做的是确保在构建应用程序之前,该.edmx文件在 Visual Studio 中作为 XML 文件打开(在解决方案资源管理器中右键单击它,使用“打开方式...”并选择 XML 编辑器) ,然后在 EDMX 文件中找到并修复此属性:

<Schema Namespace="MdsModel.Store" Alias="Self" Provider="System.Data.SqlClient" 
        ProviderManifestToken="2005" ....>
        ****************************

确保ProviderManifestToken设置为 的值2005

不幸的是,我还没有找到一种非常好的方法来将它设置为任何地方的属性,您只需在每次更改 EDMX 模型文件中的某些内容以及构建应用程序之前检查它。

于 2013-06-06T05:01:16.677 回答
0

出于某种原因,它不会让我添加评论(对不起,这个网站还是有点新的)所以我把它作为答案发布:使用SqlDateTime数据类型可以成为你的选择吗?

于 2013-06-05T22:20:00.407 回答