我的项目使用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不起作用或者我做错了什么?
谢谢。
答案 0 :(得分:4)
您已经在问题中提供了解决方案...... :)您必须将新属性声明为:
public DateTime? CreateDate { get; set; }
DateTime?
是nullable type,表示CreateDate
可以为空。
这是必要的,因为当从数据库引入记录并且其CreateDate
为NULL
时,模型上的支持属性应接受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();
}
}