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

时间:2013-04-05 08:46:40

标签: c# .net entity-framework entity-framework-4.1 entity-framework-5

我有一个名为Client的类,它首先使用Entity Framework代码映射到数据库表。该表有一个我需要在Client类中提供的计算字段,但我知道不可能写入该字段。有没有办法在保存时配置Entity Framework忽略属性,但在读取时包含属性?

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

2 个答案:

答案 0 :(得分:9)

您可以将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);
    }
}

答案 1 :(得分:3)

将属性标记为已计算:

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