映射可空类型 Code First

Cuo*_*yen 3 mapping datetime entity-framework nullable ef-code-first

我的项目使用 EF Code First 运行得很好。但现在我需要在数据库中添加 1 个字段(例如 DateTime 类型的 CreateDate),该字段可以为 null。

因此,我编写了脚本以向 DB(CreateDate (datetime) null ) 添加 1 个字段,然后修改模型以包含新字段

public class Account()
{
...
public DateTime CreateDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

下面是使用 FluentApi 创建此字段选项的代码

Property(x => x.CreateDate).IsOptional();
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试获取帐户的任何实例时,当我修改字段时出现错误,如下所示:

public DateTime? CreateDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后就可以了。

你们能给我解释一下吗?为什么我的 Fluent api 不起作用或者我做错了什么?

谢谢。

Len*_*rri 5

您已经在问题中给出了解决方案...:) 您必须将新属性声明为:

public DateTime? CreateDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

DateTime?是可为 null 的类型,意味着CreateDate可以为 null。

这是必要的,因为当从数据库中获取记录并且它CreateDate是NULL模型上的支持属性时,应该接受 null 作为可能的值。如果您将属性声明为仅DateTime CreateDate框架,则会出现错误,通知您无法将NULL值分配给不接受NULL.

所以你应该有:

public class Account()
{
    ...

    public DateTime? CreateDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • Fluent API 语句 `Property(x => x.CreateDate).IsOptional(); ` 将负责在数据库端创建一个可为空的 CreateDate 列。 (2认同)