C# 如何自动更新包含导航属性的审核列?

C# 如何自动更新包含导航属性的审核列?,c#,.net,entity-framework,C#,.net,Entity Framework,关于自动更新审计列,有很多类似的问题,但是它们对我不起作用,因为我还需要检测导航属性的变化 目前,我有一个调用SaveChanges()的代码: 但是问题是,如果我使用具有如下导航属性的实体: public class Lineup : BaseModelWithDate { public int Id { get; set; } public Game Game { get; set; } public Player Player { get; set; } p

关于自动更新审计列,有很多类似的问题,但是它们对我不起作用,因为我还需要检测导航属性的变化

目前,我有一个调用
SaveChanges()
的代码:

但是问题是,如果我使用具有如下导航属性的实体:

public class Lineup : BaseModelWithDate
{
    public int Id { get; set; }
    public Game Game { get; set; }
    public Player Player { get; set; }
    public string JerseyNumber { get; set; }
}
当游戏和玩家是不同的实体时,如果我更改游戏或玩家属性,则此代码不起作用

如果我修改JerseyNumber(string)属性,它仍然可以正常工作

因此,问题是,如何修改
UpdateAuditDateTimeValues()
方法的代码,以便它还检测导航属性(如游戏或玩家)的实体状态更改

编辑: 这是我在代码中分配属性的方式:

lineupEntity.Game = this.Uow.GetRepository<Game>().FindSingleLocal(x => x.GameKey == _xmlNode.GameKey);
lineupEntity.Player = this.Uow.GetRepository<Player>().FindSingleLocal(x => x.PlayerId == _xmlNode.PlayerId);
lineupEntity.JerseyNumber = _xmlNode.JerseyNumber;
lineupEntity.Game=this.Uow.GetRepository().FindSingleLocal(x=>x.GameKey==\u xmlNode.GameKey);
lineupEntity.Player=this.Uow.GetRepository().FindSingleLocal(x=>x.PlayerId==\u xmlNode.PlayerId);
lineupEntity.JerseyNumber=_xmlNode.JerseyNumber;

如果
Game
已更改,但
Player
JerseyNumber
未更改,则不会检测到更改。

为什么不在数据库触发器中处理此问题?完全独立于应用程序级别处理这些审核功能非常有用。您是否尝试过在更改导航属性时将其状态设置为“已修改”?请参阅此链接,假设
Game
Player
也继承自
BaseModelWithDate
,理想情况下此代码应该可以工作。您是否调试了代码,并查看是否跟踪了对这些属性所做的任何更改?@Luaan的原因很多,真的。目前,我想先使用EF选项,如果这不起作用,则始终会使用原始和硬核选项。@Louis不确定如何将导航属性设置为“已修改”,但将任何实体状态显式设置为“已修改”会强制EF更新整个对象,即使实际上只有一个字段已修改。不知道你是不是这个意思。我在连接状态工作顺便说一句
lineupEntity.Game = this.Uow.GetRepository<Game>().FindSingleLocal(x => x.GameKey == _xmlNode.GameKey);
lineupEntity.Player = this.Uow.GetRepository<Player>().FindSingleLocal(x => x.PlayerId == _xmlNode.PlayerId);
lineupEntity.JerseyNumber = _xmlNode.JerseyNumber;