0

我想将时间戳应用于我的实体框架项目。我有一个下面列出的课程。我希望这个类能抓住当前的日期时间。但相反,它为我提供了一个输入日期时间的字段。我希望它能够获取当前的日期时间。

 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 新手。任何帮助将不胜感激。

4

3 回答 3

3

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

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

    ...
}

但是,我的印象是您的Answer类实际上不是一个实体,而是一个视图模型。对于实际实体,我倾向于使用这样的固定/生成值做的是让数据库使用默认值填充字段,例如GetUtcDate(),然后在 EF 设计器中将StoreGeneratedPattern属性设置为Computed- 这样当您下拉实体CreatedDate时预填充。这为您提供了两种方式的数据完整性,因为您在推送数据时也无法覆盖数据库中的字段。

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

于 2012-10-12T14:42:44.277 回答
1

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

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

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

于 2012-10-12T14:40:12.753 回答
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();
    }
}
于 2012-10-12T23:45:04.800 回答