2

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

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

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

下面是使用 FluentApi 制作此字段选项的代码

Property(x => x.CreateDate).IsOptional();

问题是当我尝试获取 Account 的任何实例时,当我按如下方式修改字段时出现错误:

public DateTime? CreateDate { get; set; }

然后它工作。

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

谢谢你。

4

2 回答 2

4

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

public DateTime? CreateDate { get; set; }

DateTime?是一个可以为空的类型,意味着CreateDate可以为空。

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

所以你应该有:

public class Account()
{
    ...

    public DateTime? CreateDate { get; set; }
}
于 2012-10-06T04:38:23.637 回答
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();
    }
}
于 2012-10-07T07:15:55.743 回答