EF Core:仅在保存时忽略 属性

EF Core: Ignore property only on save

我已经映射了一个映射到数据库视图(用于查询数据)和 table(用于插入、更新数据)的实体。

要将实体映射到数据库视图,我使用此代码 (from the EF 5.0 docs):

modelBuilder
    .Entity<Blog>()
    .ToTable("Blogs")
    .ToView("BlogsView");

在数据库视图中,我有额外的列由数据库计算(它们不存在于 table 中)。我在每个 select 查询中都需要这些额外的列,但我需要在保存和更新时忽略它们。

[NotMapped] 数据注释不是解决方案,因为它会忽略所有命令(select、更新等)的属性。然而,当我省略 [NotMapped] 数据注释时,EF 在插入时抛出错误,因为 EF 试图将值插入到 table.

中不存在的列

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 属性也不是解决方案,因为在 SQL 插入语句中,EF 生成一个查询,其中 selects 来自 table 的列,而不是从数据库视图。

是否有任何解决方案可以使用 Fluent API 实现此目的,而无需将不同的实体分别映射到视图(使用附加列)和 table(不使用附加列)?

您必须将实体 属性 的 BeforeSaveBehavior(用于插入)和 AfterSaveBehavior(用于更新)都设置为 Ignore

目前没有流利的 API,但您可以使用元数据 API,例如

modelBuilder.Entity<Blog>().Property(e => e.ViewProp1)
    .Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
modelBuilder.Entity<Blog>().Property(e => e.ViewProp1)
    .Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);