gpt4 book ai didi

entity-framework - 如何确定 EF 4.1 中具有引用属性的实体是否脏?

转载 作者:行者123 更新时间:2023-12-04 06:09:34 25 4
gpt4 key购买 nike

启用 Entity Framework 4.1 并启用自动更改跟踪(代理对象),似乎支持 Entity.IsDirty 应该很容易。但是,到目前为止,我还没有发现这种情况。

public class DomainContext : DbContext, IDomainContext
{

/// <summary>
/// Indicates whether changes have been made to the entity with that have
/// not been saved. This method assumes EF Proxies are being used for change tracking.
/// </summary>
/// <param name="entityId">The Id of the entity.</param>
/// <returns>True if the entity is dirty, false otherwise.</returns>
public bool HasChanges(Guid entityId)
{
foreach (DbEntityEntry entry in this.ChangeTracker.Entries())
{
IEntity entity = entry.Entity as IEntity;
if (entity != null)
{
if (entity.Id == entityId && entry.State != System.Data.EntityState.Unchanged)
{
return true;
}
}
}
return false;
}
}

当对引用/复杂属性的实体属性进行更改时,上述方法似乎不起作用。例如:

public class UserPreferences : EntityBase
{

/// <summary>
/// Comma delimited list of AFEs for which the user is interested in viewing Events.
/// </summary>
public virtual string ViewableAFEs { get; set; }

/// <summary>
/// The primary operating area for the user. This is used for defaulting purposes.
/// </summary>
public virtual OperatingArea PrimaryOperatingArea
{
get { return _primaryOpArea; }
set
{
if (_primaryOpArea != value)
{
_primaryOpArea = value;
RaisePropertyChanged(() => PrimaryOperatingArea);
}
}
}
}

如果我新建上面的类,或者从数据库中获取现有的 UserPreferences 实体,然后更改 PrimaryOperatingArea 属性,DomainContext.HasChanges 将返回 false。我相信这是因为 Entity Framework 以不同于值类型属性的方式跟踪复杂和引用属性。

调用上述 HasChanges 方法时,更改 ViewableAFEs 属性(字符串)确实会显示为更改。

我的问题是如何在派生的 DomainContext 上公开一个通用方法,该方法将评估所有属性(包括复杂、引用、集合类型)并确定实体是否脏?

我很好奇,你们中的其他人是否使用 EF 4.1 利用 EF 实现 IsDirty 功能,或者你们是否通过使用 INotifyPropertyChanged 等推出了自己的 isDirty?

谢谢!

最佳答案

DbContext API 已经公开了检查实体或某些属性是否已更改的选项。

  • 检查实体是否被修改:

    var myFooHasChanges = context.Entry(myFoo).State == EntityState.Modified;

  • 检查属性是否被修改:

    var barWasModified = context.Entry(myFoo).Property(u => u.Bar).IsModified;

您可以在以下位置阅读所有相关信息:Using DbContext in EF 4.1 Part 5: Working with Property Values

关于entity-framework - 如何确定 EF 4.1 中具有引用属性的实体是否脏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934703/

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