我有一个名为 Client 的类首先使用实体框架代码映射到数据库表。该表有一个计算字段,我需要在我的 Client 类中可用,但我知道无法写入该字段。有没有办法将实体框架配置为在保存时忽略该属性,但在读取时包含该属性?
我曾尝试在我的配置类中使用 Ignore 方法,或使用 [NotMapped] 属性,但这些会阻止从数据库中读取该属性。
我有一个名为 Client 的类首先使用实体框架代码映射到数据库表。该表有一个计算字段,我需要在我的 Client 类中可用,但我知道无法写入该字段。有没有办法将实体框架配置为在保存时忽略该属性,但在读取时包含该属性?
我曾尝试在我的配置类中使用 Ignore 方法,或使用 [NotMapped] 属性,但这些会阻止从数据库中读取该属性。
您可以使用DatabaseGeneratedAttribute
withDatabaseGeneratedOption.Computed
选项:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public ComputedPropertyType ComputedProperty { get; set; }
或者,如果您更喜欢流利的 api,您可以HasDatabaseGeneratedOption
在您的课程中使用方法DbContext
:
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);