看起来在EntityFramework核心
中如何更改映射到db的私有/受保护属性的方式那么我该怎么做才能正确映射这个类:
class Model
{
protected string _roles {get; set;}
[NotMapped]
public IEnumerables<RoleName> Roles => Parser_rolesToRoleNames(_roles)
}
答案 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上写入数据库。