Entity framework &引用;将datetime2数据类型转换为datetime数据类型导致值超出范围。”;我该怎么修理

Entity framework &引用;将datetime2数据类型转换为datetime数据类型导致值超出范围。”;我该怎么修理,entity-framework,ef-core-2.1,ef-core-2.2,Entity Framework,Ef Core 2.1,Ef Core 2.2,我搜索了这个问题,有很多关于这个的问题,但是所有的答案都没有用,它没有解决我的问题。首先,我不能对数据库进行任何更改,我必须在数据库中保留列定义,所以如何解决这个问题 数据库定义: [DeletedDate] [datetime] NULL, C#代码表示: public DateTime? DeletedDate { get; set; } 我有一个错误: 将datetime2数据类型转换为datetime数据类型导致值超出范围。 声明已终止。 在System.Data.SqlClient

我搜索了这个问题,有很多关于这个的问题,但是所有的答案都没有用,它没有解决我的问题。首先,我不能对数据库进行任何更改,我必须在数据库中保留列定义,所以如何解决这个问题

数据库定义:

[DeletedDate] [datetime] NULL,
C#代码表示:

public DateTime? DeletedDate { get; set; }
我有一个错误:

将datetime2数据类型转换为datetime数据类型导致值超出范围。 声明已终止。 在System.Data.SqlClient.SqlConnection.OneError(SqlException异常,布尔断开连接,操作'1 wrapCloseInAction)

我已经试过了,但对我来说什么都不管用

[Column(TypeName = "datetime2")]
 public DateTime? PropertyName { get; set; }
编辑:问题是我试图发送0001/01/01。。。将日期时间值转换为sql。这就造成了问题

FLUENT API解决了我的问题

entity.Property(e => e.CreatedDate).HasColumnName("CreatedDate").HasDefaultValueSql("(getdate())");
entity.Property(e => e.UpdatedDate).HasColumnName("UpdatedDate").HasDefaultValueSql("(getdate())");

您的属性
DeletedDate
包含的值小于
SqlDateTime.MinValue.value
支持的值,请在保存或更新数据库之前重试

if(DeletedDate < SqlDateTime.MinValue.Value)
 DeletedDate = SqlDateTime.MinValue.Value
if(DeletedDate
您的属性
DeletedDate
包含的值小于
SqlDateTime.MinValue.value
支持的值,请在保存或更新数据库之前重试

if(DeletedDate < SqlDateTime.MinValue.Value)
 DeletedDate = SqlDateTime.MinValue.Value
if(DeletedDate
您的列不是datetime2类型,而是datetime类型。这意味着每次在数据库中插入/更新DeletedDate时,EF都必须将传递的DateTime2转换为DateTime值。由于DateTime的值范围低于DateTime2,因此可能会失败。如果将其设置为默认值,请特别小心,因为c#中的默认DateTime对象位于第1年,不在DateTime列的范围内。因此,这就是要求解决方案的原因。关键是:您正在传递一个无法保存在此列中的数据库中的值。通过将该值设置为null、删除行或其他方式,或者通过实际将数据库迁移到列类型为datetime2的假定模型,来删除该值。但是,如果列在数据库中定义为datetime,该怎么办?我该怎么办?如果你还有这个问题,你应该再次阅读我的评论。你的专栏不是datetime2类型,而是datetime类型。这意味着每次在数据库中插入/更新DeletedDate时,EF都必须将传递的DateTime2转换为DateTime值。由于DateTime的值范围低于DateTime2,因此可能会失败。如果将其设置为默认值,请特别小心,因为c#中的默认DateTime对象位于第1年,不在DateTime列的范围内。因此,这就是要求解决方案的原因。关键是:您正在传递一个无法保存在此列中的数据库中的值。通过将该值设置为null、删除行或其他方式,或者通过实际将数据库迁移到列类型为datetime2的假定模型,来删除该值。但是,如果列在数据库中定义为datetime,该怎么办?我该怎么办?如果你仍然有这个问题,你应该再次阅读我的评论。我不想应用这个解决方案。我想用C#(Fluent api或属性标记)表示为某种格式,并解决这个问题。我不想指定最小值,我想指定Null。你能用抛出错误的代码更新你的问题吗?你的方法不起作用。我只有权改变立场。问题是[DeletedDate][datetime]NULL,如何从C#传递值?(我有一个错误)谢谢。你能展示一下你的c代码吗?它正在抛出错误?我不想应用这个解决方案。我想用C#(Fluent api或属性标记)表示为某种格式,并解决这个问题。我不想指定最小值,我想指定Null。你能用抛出错误的代码更新你的问题吗?你的方法不起作用。我只有权改变立场。问题是[DeletedDate][datetime]NULL,如何从C#传递值?(我有一个错误)谢谢。你能给我看一下你的c代码吗?