12 EF Core 私有字段的映射
1、Fluent API 配置实体对象的私有字段赋值,只有Get没有Set 属性的映射
实体类
public class Blog { private string _url; public int BlogId { get; set; } public string Url { get { return _url; } } }
配置
modelBuilder.Entity<Blog>().Property(b => b.Url)
.HasField("_url")//设置EF Core 读取Url列值时,赋值给_url
//可配置访问模式 PropertyAccessMode.Field:直接访问私有字段返回值_url; PropertyAccessMode.Property:通过Url属性访问值 PropertyAccessMode.FieldDuringConstruction:优先使用属性访问
.UsePropertyAccessMode(PropertyAccessMode.Field);
2、隐藏属性的配置
模型
public class Blog { private string _url; //没有属性访问器 public int BlogId { get; set; } public List<Post> Posts { get; set; } }
Fluent API 配置
modelBuilder.Entity<Blog>().Property<string>("Url").HasField("_url").UsePropertyAccessMode(PropertyAccessMode.Field);
访问方式
var blogs = db.blogs.OrderBy(b => EF.Property<string>(b, "Url"));