gpt4 book ai didi

asp.net-mvc - EntityFramework 的 Activerecord 回调和 NamedScope 版本

转载 作者:行者123 更新时间:2023-12-02 08:50:44 24 4
gpt4 key购买 nike

问题:在我的模型中,我需要在触发任何 ORM 事件之前使用回调来处理数据库实体对象。另外,我正在寻找一种方法来应用 named-scope所以我不需要为每个查询提供特定条件。举个例子;当我在 dbcontext 对象上对 Items 使用 Find 时,我不需要为每次调用提及 active = true。

问题:

  1. 有什么可以与callbacks methods of ActiveRecord相媲美的吗?在 ASP.NET MVC(EntityFramework)中?如:after_save、before_save、after_create、before_create、after_validation、before_validation等。

  2. 我应该创建一个“模型 View ”来为每个查询附加命令性条件吗?请提供示例或资源/教程。

最佳答案

没有。没有可用的此类事件/回调。 EF ObjectContext 仅提供 ObjectMaterializedSavingChanges 事件。当实体从数据库中具体化(加载)时,第一个可用于使用react,第二个可用于在保存更改之前处理任何事情(它类似于覆盖 SaveChanges 方法)。

例子:

public void SavingChanges(object sender, EventArgs e)
{
ObjectContext context = (ObjectContext)sender;

var entities = context.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Where(e => !e.IsRelationship)
.Select(e => e.Entity)
.OfType<MyEntity>();

// Now you have all entities of type MyEntity which will be added
// You can use similar approach for other type of entities or
// modified entities or deleted entities
}

EF 不提供任何类型的全局条件/命名范围。您必须始终确保您的查询包含所有条件。例如,您可以创建自定义扩展方法,而不是默认的 Find 使用该扩展方法,这将添加您所有的附加条件

示例:

public static MyEntity FindWithCondition(this IQueryable<MyEntity> query, int id)
{
return query.Where(...).FirstOrDefault(e => e.Id == id);
}

关于asp.net-mvc - EntityFramework 的 Activerecord 回调和 NamedScope 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640816/

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