使用EF MVC抓取当前的DateTime

时间:2012-10-12 14:33:33

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

我想将时间戳应用于我的Entity Framework项目。我有一个下面列出的课程。我希望这个课程能抓住当前的DateTime。但它提供了一个输入我的日期时间的字段。我希望这能抓住当前的日期时间。

 public class Answer
    {
        public int ID { get; set; }
        public string Answers {get; set;}
        public System.DateTime DateCreated { get; set; }
        public string Division { get; set; }
        public string Phone { get; set; }
        public string Description { get; set; }



    }

下面是我知道错误的代码行。

public System.DateTime DateCreated { get; set; }

我有点不确定如何解决这个问题。我是实体的新手,也是MVC的新手。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以在构造函数中初始化它,例如

public class Answer
{
    public Answer()
    {
        DateCreated = DateTime.UtcNow;
    }

    ...
}

但是,我的印象是您的Answer类实际上不是实体而是视图模型。对于实际实体,我倾向于使用这样的固定/生成值让数据库使用默认值填充该字段,例如GetUtcDate()然后在EF设计人员中将StoreGeneratedPattern属性设置为Computed - 这样,当您下拉实体时,CreatedDate将被预先填充。这样既可以提供数据完整性,也可以在重新推送数据时覆盖数据库中的字段。

然后,只是将您的Answer实体映射到Answer视图模型,因此无需初始化任何内容。

答案 1 :(得分:1)

您可以在构造函数中设置DateCreated -

public Answer()
{
  DateCreated = DateTime.Now;
}

然后,如果您在MVC视图中使用它,请将该字段设置为隐藏,以便不会更改。

答案 2 :(得分:1)

您可以通过覆盖上下文中的SaveChanges()方法来处理时间戳以及可能的修改日期。

下面的简单示例。

public abstract class BaseEntity
{
    public int ID { get; set; }
    public DateTime ModifiedDate { get; set; }
    public DateTime CreatedDate { get; set; }
}
public class Answer : BaseEntity
{
    public String Answers { get; set; }
    public String Division { get; set; }
    public String Phone { get; set; }
    public String Description { get; set; }
}

public class DB_Context : DbContext
{
    .....

    public override int SaveChanges()
    {
        var changeSet = ChangeTracker.Entries<BaseEntity>();

        if (changeSet != null)
        {
            foreach (var added in changeSet.Where(x => x.State == System.Data.EntityState.Added))
            {
                added.Entity.CreatedDate = DateTime.UtcNow;
                added.Entity.ModifiedDate = DateTime.UtcNow;
            }
            foreach (var modified in changeSet.Where(x => x.State == System.Data.EntityState.Modified))
            {
                modified.Entity.ModifiedDate = DateTime.UtcNow;
            }
        }

        return base.SaveChanges();
    }
}