gpt4 book ai didi

c# - 如何在 EF 中为 POCO 实体添加 C# 自动计算?

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:53 26 4
gpt4 key购买 nike

我在 .NET 4.5.1 中使用 DB first EF 6.1.3,T4 生成的实体是具有生成的自动属性的 POCO 类。在保存到数据库之前,我想做一些计算(实际上是一个计算的 int 字段)。

我当然可以使用 UPDATE 触发器来做到这一点,但现在我更喜欢 C# 算法。我在 DBContext 中寻找要覆盖的内容,但一无所获。最接近的赌注是 ValidateEntity(...) 但这让我觉得使用它的东西与它的名字所暗示的完全不同。 (不谈论如何访问实体实例似乎并不简单)

如何以及在何处完成更新前或更好的自动计算:基于属性集?

最佳答案

您可以执行类似以下操作,即覆盖 SaveChanges。

public partial class MyEntities : ObjectContext
{
/// <summary>
/// Persists all updates to the data source with the specified System.Data.Objects.SaveOptions.
/// </summary>
/// <param name="saveOptions">A System.Data.Objects.SaveOptions value that determines the behavior of the operation.</param>
/// <returns>The number of objects in an System.Data.EntityState.Added, System.Data.EntityState.Modified, or
/// System.Data.EntityState.Deleted state when System.Data.Objects.ObjectContext.SaveChanges() was called.</returns>
public override int SaveChanges(SaveOptions saveOptions)
{
List<Itinerary> itineraryLocations = ItineraryAddedDeletedMonitor.GetItineraryLocations(this);

AlertManager.ObjectContextSavingChanges(this, null);
int changes = base.SaveChanges(saveOptions);

if (ItineraryAddedDeletedMonitor.ProcessItineraryLocations(this, itineraryLocations))
{
// new rows have been added
base.SaveChanges(saveOptions);
}

return changes;
}
}

更新:

要访问实体实例,下面示例中的 objectStateEntries 获取所有已修改、已添加和已删除的实体(根据需要更改):

IEnumerable<ObjectStateEntry> objectStateEntries = objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added | EntityState.Deleted);

foreach (ObjectStateEntry entry in objectStateEntries)
{
if (!entry.IsRelationship && entry.Entity.GetType() == typeof(CustomerTransfer) && entry.State == EntityState.Deleted)
{
// Do some magic if the entity type is a CustomerTransfer that has been deleted.
}
}

更新:

... 和变量 objectContext 是:

var objectContext = ((IObjectContextAdapter)this).ObjectContext;

关于c# - 如何在 EF 中为 POCO 实体添加 C# 自动计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570605/

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