实体框架4.1(代码优先)审计专栏

时间:2011-06-21 19:40:08

标签: asp.net-mvc entity-framework ef-code-first

我在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操作中更新该字段(如果适用)。

有没有办法可以把这个逻辑放在我的模型中?我不想在数据库端使用触发器。

2 个答案:

答案 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