EntityFramework核心(第7版)如何映射受保护/私有属性

时间:2016-05-31 08:45:31

标签: c# entity-framework entity-framework-core

看起来在EntityFramework核心

中如何更改映射到db的私有/受保护属性的方式

那么我该怎么做才能正确映射这个类:

class Model
{
   protected string _roles {get; set;}
   [NotMapped] 
   public IEnumerables<RoleName> Roles => Parser_rolesToRoleNames(_roles)
}

1 个答案:

答案 0 :(得分:1)

我不明白你的NotMapped-Property,因为它似乎没有名字?

要使EF Core映射您的受保护属性,在OnModelCreating的DbContext中使用EntityTypeBuilder.Property-Method:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>()
        .Ignore(m => m.NotMappedProperty)
        .Property(typeof(string), "_roles");

    base.OnModelCreating(modelBuilder);
}

在创建数据库期间,会生成相应的列。

要使EF将私有属性的值写入数据库,您需要覆盖SaveChanges

 public override int SaveChanges()
        {
            foreach (var entry in ChangeTracker.Entries())
            {
                foreach (var pi in entry.Entity.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic))
                {
                    entry.Property(pi.Name).CurrentValue = pi.GetValue(entry.Entity);
                }
            }
            return base.SaveChanges();
        }

这样,私有属性的所有值都会添加到相应的更改跟踪器条目中,并在Insert / Update上写入数据库。