ASP.NET MVC 5中的DateCreated和DateModified

安妮

我正在进行代码优先项目,并且需要数据库来处理DateCreatedDateModified

该应用程序在IIS Express上运行,并且具有开发机上的LocalDB,并将在带有IIS 7.5的部署服务器上使用SQL Server 2012。

我有以下模型:

public class Person : IdentityUser {

  [Required]
  public string Name { get; set; }

  public Date DateOfBirth { get; set; }

  public string Address { get; set; }

  [DatabaseGeneratedOption.Identity]
  public Date DateCreated { get; set; }

  [DatabaseGeneratedOption.Identity]
  public Date DateModified { get; set; }

}

请列出确切的步骤来配置数据库以处理事务元数据,例如需要在模型中设置的内容以及是否需要在数据库上下文配置器中执行任何操作。我正在搜索类似的内容:“您需要了解的有关ASP.NET MVC日期处理的所有信息”,但是在这方面没有太多帮助。

提前致谢。

奥马尔·阿拉尼(Omar.Alani)

我将从实体框架的角度考虑这一点。

您基本上需要执行以下操作:

1-我将定义一个类似于ITrackable接口的接口,并让我的模型实现该接口(如果这些模型需要跟踪DateCreated和DateModified属性)。

2-您的模型以某种方式知道它是否为添加/修改的实体,因为这将决定要设置的属性(对于添加的实体,对于修改的实体都是DateModified)。

3-在实体框架中使用DbContext添加尝试通过SaveChanges或SaveChangesAsync保存实体时需要调用的扩展方法,该方法将循环遍历跟踪的实体并根据实体的状态设置DateCreated和DateModified属性。

因此您的模型将如下所示:

public class Person : IdentityUser, ITrackable
{

    [Required]
    public string Name { get; set; }

    public Date DateOfBirth { get; set; }

    public string Address { get; set; }

    public DateTime DateCreated { get; set; }

    public DateTime DateModified { get; set; }
}

ITrackable的外观

public interface ITrackable
{
    public DateTime DateCreated { get; set; }

    public DateTime DateModified { get; set; }
}

扩展方法将如下所示:

internal static class ContextHelper
{
    internal static void SyncObjectsStatePreCommit(this DbContext dbContext)
    {
        foreach (var dbEntityEntry in dbContext.ChangeTracker.Entries())
        {

            // do any other stuff you want.
            // ..
            // ..

            // work with ITrackable entities
            var trackableObject = dbEntityEntry.Entity as ITrackable;

            // we need to set/update trackable properties
            if (trackableObject == null)
            {
                continue;
            }

            var dateTime = DateTime.Now;

            // set createddate only for added entities
            if (entityState.ObjectState == ObjectState.Added)
            {
                trackableObject.CreatedDate = dateTime;
            }

            // set LastUpdatedDate for any case other than Unchanged
            if (entityState.ObjectState != ObjectState.Unchanged)
            {
                trackableObject.ModifiedDate = dateTime;
            }
        }
    }
}

现在,例如,在dbContext Save方法中,您需要调用此方法来设置所有这些属性。

public override Task<int> SaveChangesAsync()
{
    this.SyncObjectsStatePreCommit();
    return base.SaveChangesAsync();
}

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章