Entity Framework Core如何生成列并跟踪列记录(core,entity,framework,开发技术)

时间:2024-05-03 02:59:14 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    Entity%C2%A0Framework%C2%A0Core%E5%A6%82%E4%BD%95%E7%94%9F%E6%88%90%E5%88%97%E5%B9%B6%E8%B7%9F%E8%B8%AA%E5%88%97%E8%AE%B0%E5%BD%95

注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存在变动。

当您设计数据库时,有时需要添加列以跟踪记录何时更改,以及谁进行了更改。例如,您添加以下列:

CreatedAt

CreatedBy

LastUpdatedAt

LastUpdatedBy

您可以轻松地使用默认值和触发器来处理CreatedAtLastUpdatedAt列。老实说,创建触发器是件无聊的事情,你也不想自己做。此外,很难设置用户名,因为它是应用程序的信息;实际上,在Web程序的上下文中,它们只是连接到数据库的一个用户,因此,您无法使用数据库中CURRENT_USER函数设置跟踪列的值。

当然,您不想访问这个属性。相反,您希望 Entity Framework 为您自动执行,所以,解决的办法是调用SaveChangesSaveChangesAsync方法之前自动设置这些属性的值。在模型中有多种方法处理这些属性:您可以在模型中添加读写(R/W)属性;您也可以使用只读(R/O)属性;还有一种方案,您可以使用阴影(Shadow)属性。在最后一种方案中,是将列不映射到模型中的属性,只有 Entity Framework 才知道这些属性。是的,EF Core 非常灵活:)

我们用 Entity Framework 实现这3种方案!

在这种情况下,实体将具有读/写属性。这意味着,您可以在代码中更改属性的值。

现在,我们将更改SaveChanges方法的默认行为来设置跟踪属性的值。要小心,有两个方法要重写:SaveChanges和异步方法SaveChangesAsync。在代码中遍历上下文中跟踪的实体,并根据状态设置跟踪属性的值。代码非常简单:

这个方案有个不容忽视的问题,属性是可写的,您不希望在代码中设置属性的值。让我们看看如何使用只读属性。

Entity Framework Core 允许将列映射到字段。这样,您可以使用只读属性,我们来修改Post类:

上面的代码有点麻烦,但属性现在是只读的。您需要指引 Entity Framework 使用这些字段来设置列的值。

您不能像以前那样实现OnBeforeSaving方法,因为属性没有setter。不过,您可以使用ChangeTracker来指引 Entity Framework 为属性设置值。这种方式无需访问属性或字段。

我认为应是使用的方式,因为这种方式很清晰。

在某些情况下,您可能需要设置列的值而不在模型中定义属性。例如,您可能会公开最后更新的日期,但不会显示谁做了更改。Entity Framework Core 可以通过使用阴影(Shadow )属性来处理这个。阴影属性在OnModelCreating方法中声明,但在类中不存在。您可以使用ChangeTracker读取和写入阴影属性的值。

本文:Entity Framework Core如何生成列并跟踪列记录的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java中ModelMapper的高级使用方法有哪些下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18