- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 Entity Framework 7(之前使用 EF 6)在 Asp.Net 5 项目中设置数据库,当我想让某些列可为空时,我会使用:
modelBuilder.Entity<Article>().Property(t => t.ArticleDateModified).IsOptional();
但似乎 IsOptional
不再是 EF7 的一部分,我想知道如何使用 EF7 实现同样的事情?
编辑:马克的答案确实是正确的,首先我认为它有效,因为我发现了类似 IsOptional
:
builder.Entity<Article>().Property(t => t.ArticleDateModified).IsRequired(false);
但是当我在没有它的情况下运行一些测试后,它将数据库列设置为可为空,因为我在域模型中将其标记为可为空:
public DateTime? ArticleDateModified { get; set; }
还值得注意的是,当我将 DateTime
设置为不可空并使用 IsRequired(false)
时,出现以下错误:
The property 'ArticleDateModified' on entity type 'Article' cannot be marked as nullable/optional because the type of the property is 'DateTime' which is not a nullable type. Any property can be marked as non-nullable/required, but only properties of nullable types and which are not part of primary key can be marked as nullable/optional.
所以,我想知道如果要使数据库列可以为空我所要做的就是使其在我的域类中可以为空,那么这里的 IsRequired(false)
有什么用?
最佳答案
基于此 documentation page 中的注释,看来对以声明方式执行此操作的支持已被取消。也就是说:
A property whose CLR type cannot contain null cannot be configured as optional. The property will always be considered required by Entity Framework.
从 GitHub 上托管的项目的设计讨论中可以看出这是故意的,specifically :
<小时/>That is, a property marked as nullable supports null values, while a property marked as non-nullable must never contain null values. It follows from this that marking a property which is of a non-nullable CLR type as allowing nulls will not be allowed. This is different from the EF6 behavior where this is allowed. [emphasis added]
结果是,在 EF7 中,NULL
列严格意味着可为 null 的映射属性。如果您的属性可为空,则关联列必须为 NULL
,除非您使用 IsRequired
标记或配置它。
对 OP 编辑的响应
这很有趣,我最初并没有看到有关 IsRequired(bool)
API 的文档。我在某个六月发现了一个关于它的讨论点meeting notes声明这相当于 EF6 的 IsOptional()
:
.IsOptional() - We'll provide this functionality via calling Required(false)
.IsRequired() - Provide Required() with the same functionality
尽管这是最初的意图,但撤销支持的设计决定是从 10 月份开始的。 (每次更新)尝试在不可为 null 的属性上设置 IsRequired(false)
会导致运行时错误,而不是被完全删除。
虽然现在是多余的,但在不破坏有效代码的情况下无法删除 API:它不是使用单独的 IsRequired(bool)
和 IsRequired()
定义实现的,而是使用单个 IsRequired(bool required = true)
。如果它被删除并替换为无参数版本,这将是一个重大更改。
关于entity-framework - Entity Framework 7 Fluent API 无法识别 IsOptional(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34408790/
这是我的 Fluent 模型 struct Ailment: PostgreSQLModel { enum Frequency: String , Content { case regular
我正在尝试使用 Fluent Nhibernate 自动映射一个简单的继承层次结构,并且我需要为每个表使用与其类稍有不同的名称(下划线而不是 Pascal 大小写)。这似乎是一个使用约定的明显地方。我
如何为没有标识列的表指定流畅的 NHibernate 映射? 我想要这样的东西: public sealed class CustomerNewMap : ClassMap, IMap { p
使用 FluentMigrator,有没有办法找出 MigrateUp() 函数是否确实会迁移某些东西,或者它是否已经是最新的? 最佳答案 没有简单的方法可以使用公共(public) api 判断 M
我正在使用 Fluent NHibernate,我喜欢它! 我有一个小问题:启动时间大约是 10 秒,我不知道如何优化 Fluent nHibernate 为了减少这个启动时间的问题,我把它放在一个线
我在 Fluent NHIbernate 中使用 AutoPersistenceModel 来映射我的所有实体,并且一切正常:D 但是,我的几个对象有 public virtual IList Com
我有一个数据库,我正在运行多个应用程序。我喜欢通过为每个应用程序创建模式来分隔表。对于我最新的应用程序,我使用的是 FluentNHibernate。似乎我的大部分管道都是正确的,但是当我尝试查询其中
应用程序有许多扩展程序集,它们包含其类的映射。我需要为这些映射中的所有(基本、连接、多对多等)表名添加前缀。 例如 Assembly: ~/bin/Extensions/Foo.dll
您好,我很好奇 DDD 是如何使用 Fluent Nhibernate 真正实现的。例如,我有一个名为 User 的实体类和另一个名为 UserProfile 的类,就我而言,UserProfile
是否可以在 Fluent NHibernate 中映射来自多个程序集的实体? 我试过了 AutoPersistenceModel .MapEntitiesFromAssemblyOf() .AddEn
我有一个看起来像这样的基类: public abstract class MyBaseClass { public virtual DateTime UpdatedOn { get; set;
我有 Post 和 Comment 类,它们有一对多的关系,其中 Post 有一个评论列表。我如何将其映射为与 Fluent NHibernate 的单向关系,因为评论不需要知道其父 Post?目前,
我对如何查询模型对象的子对象并立即使用它感到困惑。我的Client包含数量Station child final class Client: PostgreSQLModel { var sta
目前我有一个表“ComponentAnalysis”和一个表“HistoryOfUse”,我正试图在 Fluent NHibernate 中进行映射。 一个成分分析应该只有1个使用历史,一个使用历史应
正如标题所说,我想知道我是否应该避免将 fluent nhibernate 用于生产代码,或者它是否足够成熟,可以“深入研究”? :) 最佳答案 FluentNHibernate API 尚未稳定下来
我正在尝试使用 Fluent NHibernate,我有几个问题。我发现缺少文档。 我知道 Fluent NHibernate/NHibernate 允许您自动生成数据库模式。人们通常只对测试/开发数
我正在使用 fluent-nhibernate 约定来映射我的实体: public class HasManyConvention : IHasManyConvention {
如何更改多列索引中的列顺序? IE: mapping.References(x => x.SomeReference).SetAttribute("index", "IX_index"); mappi
我需要像下面的代码一样创建一个外键: Create.ForeignKey().FromTable("TCGDocFiscalOpMedItem").ForeignColumn("IDCabecalho
我正在使用 Sharp 架构,并且在许多情况下都在实体中使用了值对象。这是一个明显的简单示例: public class Person : Entity { protected Person(
我是一名优秀的程序员,十分优秀!