EntityFramework core(7th)保護されたプロパティとプライベートプロパティのマッピング方法

c# entity-framework entity-framework-core

質問

EntityFrameworkコアでdbにマップされたプライベート/プロテクトプロパティがどのように変更されたかのように見える

では、このクラスを正しくマップできるようにするにはどうすればよいですか。

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

人気のある回答

私はあなたのNotMappedプロパティを理解していない、それは名前がないように思われる?

とにかく、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();
        }

このようにして、プライベートプロパティのすべての値が対応する変更トラッカーエントリに追加され、挿入/更新時にデータベースに書き込まれます。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ