【问题标题】:Entity Framework 4.1 Automatic dateEntity Framework 4.1 自动日期
【发布时间】:2011-06-24 08:46:48
【问题描述】:

我对 Entity Framework(和 asp.net mvc 3)还很陌生,这是我第一次使用 EF4.1 代码。

我的问题很简单:当我通过模型为数据库生成一个新表时,我想做一个

  1. 在创建新行时自动将当前日期时间添加到字段中。
  2. 每次更新字段时自动更新字段。

实际上,变量看起来像:

 [DisplayName("Data Modifica")]
 [DataType(DataType.DateTime)]
 [DisplayFormat(DataFormatString = "{0:d}")]
 public DateTime DataModifica { get; set; }

我想我可以在 datacontext 的“OnModelCreating”事件上写一些东西,但我太新了,无法掌握这个:)

有人可以帮忙吗?

提前致谢, 五、

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework-4.1


    【解决方案1】:

    这与模型的创建无关。 “模型”是对类和数据库之间映射的描述。 OnModelCreating 用于修改映射定义,不用于修改数据。它与实体实例本身的数据无关。

    如果你想自动修改你可以覆盖SaveChanges:

    public override int SaveChanges()
    {
         DateTime now = DateTime.Now;
         foreach (var entity in ChangeTracker.Entries<YourEntityType>()
                                             .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified)
                                             .Select(e => e.Entity))
         {
              entity.DateModifica = now; // set the date
         }
    
         return base.SaveChanges();
    }
    

    【讨论】:

    • 谢谢。这正是我所需要的。
    【解决方案2】:

    为什么不将属性定义为带有支持字段的属性,该字段被初始化为默认值?

    private DateTime _dateOfRequest = DateTime.Today;
       [Display(Name = "Date of Request"), DataType(DataType.Date)]
       public System.DateTime DateOfRequest {
            get { return _dateOfRequest; }
            set { _dateOfRequest = value; }
       }
    

    【讨论】:

    • 我认为这种方法的缺点是存储在字段中的日期时间将指示实例的创建时间,而不是它持久保存到数据库的时间。这是一个很小的差异,但它可能很重要,具体取决于您的应用程序。
    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2011-09-06
    • 2023-04-02
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多