gpt4 book ai didi

c# - ASP.NET MVC 5 中的 DateCreated 和 DateModified

转载 作者:行者123 更新时间:2023-11-30 14:54:34 25 4
gpt4 key购买 nike

我正在做一个 Code-First 项目,我需要数据库来处理 DateCreatedDateModified

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

我有以下模型:

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 日期处理的所有信息”,但没有涉及到太多内容。

提前致谢。

最佳答案

我会从 Entity-framework 的角度考虑这个问题。

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

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

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

3- 使用 Entity-Framework 中的 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();
}

希望对您有所帮助。

关于c# - ASP.NET MVC 5 中的 DateCreated 和 DateModified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com