首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架4.1 (代码优先)审计栏

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

Stack Overflow用户
提问于 2011-06-21 19:40:08
回答 2查看 1.1K关注 0票数 0

我在ASP.NET MVC站点上使用实体框架4.1和代码优先方法

假设我有一个名为Profile的实体,它可以跟踪用户最喜欢的书籍,并且我希望跟踪用户何时更新他们最喜欢的书。

更新

使用下面的类作为示例,每当FavoriteBookLastUpdated属性的值发生变化时,我希望将FavoriteBook属性设置为当前日期。

代码语言:javascript
复制
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操作中更新该字段。

有什么办法能让我的模型有这种逻辑吗?我不喜欢在数据库端使用触发器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-21 19:57:44

编辑:我读了你的评论和新的例子:)

你能不能让你最喜欢的图书属性成为一个也能设置LastModified的实际属性?我不确定EF4是否会接受这一点,但是您可以创建一个用于更改FavoriteBook的公共属性,而只为EF4创建一个特殊的属性。您可能需要使特殊属性“InternalsVisibleTo”

http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx

票数 2
EN

Stack Overflow用户

发布于 2011-06-22 07:04:26

如果你不喜欢@Per Hornsh j-Schierbeck的答案,我认为这是正确的,你可以尝试使用EF:

代码语言:javascript
复制
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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6431040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档