我在ASP.NET MVC站点上使用实体框架4.1和代码优先方法
假设我有一个名为Profile的实体,它可以跟踪用户最喜欢的书籍,并且我希望跟踪用户何时更新他们最喜欢的书。
更新
使用下面的类作为示例,每当FavoriteBookLastUpdated属性的值发生变化时,我希望将FavoriteBook属性设置为当前日期。
public class Profile
{
public int Id { get; set; }
public string Name { get; set; }
public string FavoriteBook { get; set; }
public DateTime? FavoriteBookLastUpdated { get; set; }
}现在,在调用DBContext的SaveChanges()方法之前,我只需要在控制器的Edit操作中更新该字段。
有什么办法能让我的模型有这种逻辑吗?我不喜欢在数据库端使用触发器。
发布于 2011-06-21 19:57:44
编辑:我读了你的评论和新的例子:)
你能不能让你最喜欢的图书属性成为一个也能设置LastModified的实际属性?我不确定EF4是否会接受这一点,但是您可以创建一个用于更改FavoriteBook的公共属性,而只为EF4创建一个特殊的属性。您可能需要使特殊属性“InternalsVisibleTo”
http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx
发布于 2011-06-22 07:04:26
如果你不喜欢@Per Hornsh j-Schierbeck的答案,我认为这是正确的,你可以尝试使用EF:
public override int SaveChanges()
{
foreach (var entry in ChangeTracker.Entries<Profile>())
{
if (entry.OriginalValues == null || // I'm not sure what value this have if entity is not loaded
entry.Entity.FavoritBook != entry.OriginalValues["FavoriteBook"].ToString())
{
entry.Entity.FavoriteBookLastUpdated = DateTime.Now;
}
}
return base.SaveChanges();
}https://stackoverflow.com/questions/6431040
复制相似问题