【问题标题】:Entity Framework changing values实体框架更改值
【发布时间】:2013-02-22 04:41:45
【问题描述】:

我在数据库中有一个值

public int Rev { get; set; }

我想在每行更新时将其更改为 Rev+1,但由于我是实体框架的新手,我不知道如何编程。有人可以帮忙吗?

【问题讨论】:

  • 每当您更新代码时,请执行Rev = Rev +1?
  • 无处 - 我想知道如何做到这一点,而如果我在 setter 方法中更新它,我担心每次调用 Context.Save() 方法时都会更新它 -即使我没有对其进行任何更改。
  • @CodeDemen 这个字段的用途是什么?您想知道实体被保存到数据库的确切次数吗?
  • 是的,正是我需要的
  • 你在使用codefirst吗?

标签: c# asp.net-mvc-4 entity-framework-5


【解决方案1】:

您可以创建一个新的分部类来覆盖 EF 对象上的 SaveChanges() 方法。在 SaveChanges() 方法中可以检查YourTableEntity 的每个条目是否被修改,如果是则增加 Rev 属性。

public partial class YourDBNameDBEntities : DbContext
{
    public override int SaveChanges()
    {
        foreach (var entry in this.ChangeTracker.Entries<YourTableEntity>().ToList())
        {
            if (entry.State == System.Data.EntityState.Modified)
            {
                entry.Entity.Rev++;
            }
        }
        return base.SaveChanges();
    }
}

【讨论】:

  • 如果不能直接在 SQL 表上创建触发器,我会首先对数据库执行此操作。
【解决方案2】:

您可以创建触发器,它会在您更新表格时增加您的字段。

您可以通过创建一个继承自 CreateDatabaseIfNotExists 或其他实现 IDatabaseInitializer 并覆盖方法 Seed 的类来实现。

这是一个简短的例子:

class CdineWithTrigger : CreateDatabaseIfNotExists<RepositoryContext>
{
   protected override void Seed(RepositoryContext context)
   {
      context.Database.ExecuteSqlCommand("YOUR SQL CORE FOR ADDING A TRIGGER");
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2023-04-09
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2014-08-21
    相关资源
    最近更新 更多