关于自动更新审计列有很多类似的问题,但它们对我不起作用,因为我还需要检测导航属性的变化。
目前,我在SaveChanges()
调用了以下代码:
private void UpdateAuditDateTimeValues()
{
DateTime currentDateTime = DateTime.Now;
foreach (var change in Context.ChangeTracker.Entries().Where(
x => x.State == EntityState.Added || x.State == EntityState.Modified))
{
var entityWithDate = change.Entity as BaseModelWithDate;
if (entityWithDate != null)
{
if (change.State == EntityState.Added)
{
entityWithDate.CreatedDate = currentDateTime;
}
entityWithDate.ModifiedDate = currentDateTime;
}
}
}
但问题是如果我使用具有这样的导航属性的实体:
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(字符串)属性,它仍然可以正常工作。
所以问题是,如何修改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;
如果Game
已更改,但Player
和JerseyNumber
没有更改,则无法检测到更改。