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

c# entity-framework entity-framework-core

看起來在EntityFramework核心中如何更改映射到db的私有/受保護屬性的方式

那麼我該怎麼做才能正確映射這個類:

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

熱門答案

我不明白你的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上寫入數據庫。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因