ASP.NET Core 中的影子属性
一、隐藏属性
隐藏属性也叫影子属性,该属性不是在 .Net 实体类中定义的属性,而是在 EFCore 模型中为该实体类型定义的属性,这些属性的值和状态完全在变更跟踪器中维护,它有以下两个主要功能:
1、避免映射公开属性:当数据库中某些字段不想映射到实体类上公开的属性时,隐藏属性非常有用。
2、用于外键属性:隐藏属性通常用于外键属性,其中两个实体之间的关系由数据库中的外键值表示,但两个实体关系是使用实体类型之间的导航属性进行管理。
二、配置隐藏属性
不能通过数据注释来创建隐藏属性,只能通过 Fluent API 来创建,Blog 实体中没有映射 LastUpdated 公开属性,但可以创建隐藏属性:
class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>().Property<DateTime>("LastUpdated"); } }
三、设置隐藏属性值
在新增博客数据时,可以通过 ChangeTracker API 为隐藏属性 LastUpdated 设置时间值,并提交到数据库表中:
public async Task<IActionResult> Create([Bind("Url")] Blog blog) { // 设置隐藏属性的值 BloggingContext.Entry(blog).Property("LastUpdated").CurrentValue = DateTime.Now; BloggingContext.Add<Blog>(blog); await BloggingContext.SaveChangesAsync(); }
四、读取隐藏属性值
可以通过 LINQ 查询中引用隐藏属性 EF.Property 静态方法,通过隐藏属性 LastUpdated 排序,读取博客集合数据:
var blogs = context.Blogs.OrderBy(b => EF.Property<DateTime>(b, "LastUpdated"));
五、相关问题与解答
问题1:为什么不能通过数据注释来创建隐藏属性?
解答:因为隐藏属性的值和状态完全在变更跟踪器中维护,而不是直接在实体类中定义的,所以不能通过数据注释来创建,只能通过 Fluent API 在模型构建时进行配置。
问题2:隐藏属性在哪些场景下特别有用?
解答:隐藏属性在以下场景下特别有用:一是当数据库中的某些字段不需要映射到实体类的公开属性上时;二是当需要表示两个实体之间的外键关系,但这种关系是通过导航属性而非实体类中的外键属性来管理时。
到此,以上就是小编对于“asp影藏属性”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/65326.html<