映射Nullable类型Code First

时间:2012-10-06 04:36:00

标签: entity-framework datetime ef-code-first mapping nullable

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

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

public class Account()
{
...
public DateTime CreateDate { get; set; }
}

以下是使用FluentApi

创建此字段选项的代码
Property(x => x.CreateDate).IsOptional();

问题是当我试图获取任何Account实例时,我收到了一个错误 当我修改字段时如下:

public DateTime? CreateDate { get; set; }

然后它有效。

你能告诉我这件事吗?为什么我的流利api不起作用或者我做错了什么?

谢谢。

2 个答案:

答案 0 :(得分:4)

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

public DateTime? CreateDate { get; set; }

DateTime?nullable type,表示CreateDate可以为空。

这是必要的,因为当从数据库引入记录并且其CreateDateNULL时,模型上的支持属性应接受null作为可能的值。如果您将该属性声明为DateTime CreateDate,则框架会向您提供错误消息,告知它无法将NULL值分配给不接受NULL的属性。

所以你应该:

public class Account()
{
    ...

    public DateTime? CreateDate { get; set; }
}

答案 1 :(得分:4)

尝试基于此示例:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Family { get; set; }
    public string Phone { get; set; }
    public DateTime Birthday { get; set; }
}

DbContext和流利的Api:

public class dbMvc1:DbContext
{
    public DbSet<Student> Student { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>().Property(x => x.Birthday).IsOptional();
    }
}