【发布时间】:2016-03-28 07:13:57
【问题描述】:
我目前正在使用实体框架 7 在我的 Asp.Net 5 项目中设置我的数据库,之前使用的是 EF 6,当我想让我的一些列可以为空时,我会使用:
modelBuilder.Entity<Article>().Property(t => t.ArticleDateModified).IsOptional();
但似乎IsOptional 不再是 EF7 的一部分,我想知道如何使用 EF7 实现相同的目标?
编辑:
Marc 的回答确实是正确的,首先我认为它有效,因为我发现了类似IsOptional 的东西:
builder.Entity<Article>().Property(t => t.ArticleDateModified).IsRequired(false);
但是在没有它的情况下运行了一些测试后,它将数据库列设置为可为空,因为我在我的域模型中将其标记为可为空:
public DateTime? ArticleDateModified { get; set; }
另外值得注意的是,当我将DateTime 设为不可为空并使用IsRequired(false) 时,出现以下错误:
实体类型“Article”上的属性“ArticleDateModified”不能标记为可为空/可选,因为该属性的类型是“DateTime”,它不是可为空的类型。任何属性都可以标记为不可空/必需,但只有可空类型且不属于主键的属性才能标记为可空/可选。
所以,我想知道 IsRequired(false) 在这里有什么用处,如果我要做的就是让数据库列可以为空,就是让它在我的域类中可以为空?
【问题讨论】:
-
我在下面回答了一些研究,但首先我应该问:您能否通过从
ArticleDateModified中删除可空性并查看使用IsRequired(false)映射时数据库中生成的内容来测试假设?如果该列为空,无论他们在 10 月份做出什么决定,他们基于 6 月份的设计决定构建它的事实将胜过 10 月份的决定,至少在下一个主要版本发布之前,因为(技术上)RTM API 不会改变从 RC1 删除或禁用 API 将是一项重大更改。如果该列不为空,则它已被禁用。 -
@MarcL。我用答案编辑了问题。
标签: entity-framework entity-framework-core ef-fluent-api