所以我有一个带有两个属性的EF类。
public class MyTable
{
public DateTime Requested { get; set; }
public Guid RequestedUserID { get; set; }
}
现在,我希望能够在更改请求时将当前用户ID插入RequestedUserID
。为此,我可以覆盖EF的DbContext.SaveChanges()
事件并检查任何修改后的列是否具有指定属性,指示我的代码也修改关联的UserID
列。示例属性标记:
public class MyTable
{
[TrackModifingUser(UserIDColumn = nameof(RequestedUserID))]
public DateTime Requested { get; set; }
public Guid RequestedUserID { get; set; }
}
然后在我的DbContext.SaveChanges()
事件中,我将按名称获取属性并相应地设置其值。
问题,我希望我的属性可以以某种方式存储属性本身。随着那个跳过按名称查找属性。这样的事情。
public class MyTable
{
[TrackModifingUser(UserIDColumn = RequestedUserID)]
public DateTime Requested { get; set; }
public Guid RequestedUserID { get; set; }
}
这可能或者我必须在运行时解析该属性吗?我可以使用任何类型的缓存来避免同一列中的名称多次获取属性吗?
答案 0 :(得分:0)
如果我正确理解了问题,您希望将特定字段标记为"当前用户ID"字段,并让DbContext.SaveChanges()自动将该字段设置为当前用户的值,如果它被标记。如果这是正确的,这可能是接口的一个很好的用例。
public interface ITracksCurrentUser
{
Guid CurrentUserID {get;set;}
}
public class MyTable : ITracksCurrentUser
{
public DateTime Requested { get; set; }
public Guid RequestedUserID { get; set; }
public Guid ITracksCurrentUser.CurrentUserID
{
get { return RequestedUserID;}
set { RequestedUserID = value;}
}
}
public override int SaveChanges()
{
foreach(userentity in ChangeTracker.Entries().Select(e => e.Entity).OfType<ITracksCurrentUser>())
userentity.CurrentUserID = Session["UserID"];
}