gpt4 book ai didi

entity-framework - 使用 EF Code-First 模型在保存或验证之前执行逻辑

转载 作者:行者123 更新时间:2023-12-04 07:28:01 26 4
gpt4 key购买 nike

我仍然习惯 EF Code First,多年来一直在使用 Ruby ORM、ActiveRecord。 ActiveRecord 曾经有各种各样的 callbacks像 before_validation 和 before_save,可以在将对象发送到数据层之前对其进行修改。我想知道 EF Code First 对象建模中是否有等效技术。

当然,我知道如何在实例化时设置对象成员(设置默认值等),但有时您需要在对象生命周期的不同时刻进行干预。

使用一个稍微做作的例子,假设我有一个链接 Authors 和 Plays 的连接表,用相应的 Authoring 对象表示:

public class Authoring
{
public int ID { get; set; }

[Required]
public int Position { get; set; }

[Required]
public virtual Play Play { get; set; }

[Required]
public virtual Author Author { get; set; }
}

其中 Position 表示与给定 Play 关联的作者的零索引排序。 (您可能有一个“South Pacific” Play 有两个作者:“Rodgers”作者的位置为 0,“Hammerstein”的作者位置为 1。)

假设我想创建一个方法,在保存 Authoring 记录之前,它会检查是否有与其关联的 Play 的任何现有作者。如果否,则将 Position 设置为 0。如果是,它将找到设置与该 Play 关联的最高值的 Position 并递增 1。

我将在 EF 代码优先模型层中的何处实现此类逻辑?而且,在其他情况下,如果我想在检查验证错误之前在代码中修改数据怎么办?

基本上,我正在寻找与上面提到的 Rails 生命周期 Hook 等效的东西,或者至少是某种伪造它的方法。 :)

最佳答案

您可以覆盖 DbContext.SaveChanges,在那里进行修复并调用 base.SaveChanges()。如果这样做,您可能需要在进行修复之前调用 DetectChanges。顺便提一句。 Programming Entity Framework DbContext 一书(ISBN 978-1-449-31296-1)第 192-194 页讨论了同样的问题。是的,这是在验证的背景下......

关于entity-framework - 使用 EF Code-First 模型在保存或验证之前执行逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com