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

Joo*_*zef 9 c# entity-framework-core ef-fluent-api

我已将实体映射到数据库视图(用于查询数据)以及表(用于插入、更新数据)。

要将实体映射到数据库视图,我使用以下代码(来自 EF 5.0 文档):

modelBuilder
    .Entity<Blog>()
    .ToTable("Blogs")
    .ToView("BlogsView");
Run Code Online (Sandbox Code Playgroud)

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

数据[NotMapped]注释不是解决方案,因为它忽略所有命令(选择、更新等)的属性。但是,当我省略[NotMapped]数据注释时,EF 会在插入时引发错误,因为 EF 尝试将值插入到表中不存在的列中。

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

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

Iva*_*oev 15

您必须将实体属性BeforeSaveBehavior(用于插入)和(用于更新)设置为。AfterSaveBehaviorIgnore

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

modelBuilder.Entity<Blog>().Property(e => e.ViewProp1)
    .Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
modelBuilder.Entity<Blog>().Property(e => e.ViewProp1)
    .Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
Run Code Online (Sandbox Code Playgroud)