实体框架 - 我应该在函数中编辑对象,还是在函数完成之后编辑对象

时间:2015-02-04 08:19:23

标签: asynchronous asp.net-mvc-5 entity-framework-6 ienumerable updatemodel

我正在编写一个MVC 5互联网应用程序,在那里我检索需要发送电子邮件的许多Account个对象,然后我发送电子邮件。发送电子邮件后,我需要更新每个DateTime对象中的Account字段,以存储值以显示电子邮件已发送。

这是我的代码:

public async Task SendDailyExpirationEmails(int dayInterval)
{
    IEnumerable<Account> freeTrialAccounts = GetFreeTrialAccountsForSendDailyExpirationEmails(dayInterval).ToList();
    IEnumerable<Account> paidServiceAccounts = GetPaidServiceAccountsForSendDailyExpirationEmails(dayInterval).ToList();
    await SendFreeTrialSubscriptionExpirationEmails(freeTrialAccounts);
    await SendPaidSubscriptionExpirationEmails(paidServiceAccounts);
}

freeTrialAccountspaidServiceAccounts的SendEmail函数使用ForEach Loop循环遍历Account中的每个IEnumerable

我的问题是:

我应该在完成SendEmail功能之后还是在SendEmail功能中更新DateTime字段?

这种情况是否有共同的编码习惯?

提前致谢。

1 个答案:

答案 0 :(得分:0)

为了保持DateTime值的精确度以便在减少数据库调用时尽可能正确,您将希望在电子邮件发送后立即对其进行记录,但是等待信息持续到您的电子邮件流程已完成。

我想说有一个类属性可以跟踪每封电子邮件的发送时间,然后在发送完所有电子邮件后,拨打电话到数据库以更新发送的日期/时间。

如果你有一些其他工作/任务/应用程序尽快依赖这些信息,那么你需要在发送电子邮件后立即保留数据。否则我没有看到延迟它的问题。