我在ASP.NET MVC网站上使用Entity Framework 4.1和Code-First方法
假设我有一个名为个人资料的实体,可以跟踪用户最喜欢的图书,我想跟踪用户何时更新自己喜爱的图书。
已更新:
以下面的类为例,每当FavoriteBook属性的值发生变化时,我都想将FavoriteBookLastUpdated属性设置为当前日期。
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操作中更新该字段(如果适用)。
有没有办法可以把这个逻辑放在我的模型中?我不想在数据库端使用触发器。
答案 0 :(得分:3)
如果您不喜欢我认为正确的@PerHornshø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();
}
答案 1 :(得分:2)
编辑:我读了你的评论和新例子:)
你能不能把你最喜欢的书籍属性作为同时设置LastModified的实际属性?我不确定EF4是否会接受,但是你可以创建一个公共属性来更改FavoriteBook和一个特殊的EF4。您可能需要创建特殊属性“InternalsVisibleTo”
http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx