实体框架代码优先-如何在保存时忽略列

本文关键字:保存 代码 框架 实体 | 更新日期: 2023-09-27 18:07:50

我有一个名为Client的类首先使用实体框架代码映射到数据库表。表中有一个计算字段,我需要在Client类中可用,但我知道不可能写入该字段。是否有一种方法可以配置实体框架在保存时忽略该属性,但在读取时包含该属性?

我已经尝试在我的配置类中使用Ignore方法,或使用[NotMapped]属性,但这些都阻止了从数据库中读取属性。

实体框架代码优先-如何在保存时忽略列

您可以使用DatabaseGeneratedAttributeDatabaseGeneratedOption.Computed选项:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public ComputedPropertyType ComputedProperty { get; set; }

或者如果你喜欢流畅的api,你可以在DbContext类中使用HasDatabaseGeneratedOption方法:

public class EntitiesContext : DbContext
{
    public DbSet<EntityType> Enities { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<EntityType>().Property(e => e.ComputedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    }
}

标记属性:

modelBuilder
    .Entity<MyEntityType>()
    .Property(_ => _.MyProperty)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);