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);
我已经映射了一个映射到数据库视图(用于查询数据)和 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);