具有业务逻辑与代码的视图

时间:2011-06-15 12:44:15

标签: .net sql subsonic

对于应用程序,我需要每小时向最终用户发送个性化的邀请电子邮件。这些用户是电子邮件地址,其余信息都在数据库中。

  • 所有有点用户 Planned.IsPlannable设置为True和 有一个Planned.DateStart和一个 Planned.DateEnd之间某个 期间可用于接收 电子邮件。
  • 每小时发送 350条消息
  • 所有信息 必须包含在消息中 来自数据库。
  • 申请表是 一个 .NET4.0控制台应用程序,用于数据 访问我使用 Subsonic3.0

至少有两种情况可供选择:通过

检索相应的数据

1 :)查看类似的内容:

SELECT    [Computer].ComputerName, 
          [User].UserEmail, 
          [Planned].DateAvailable, 
          [Planned].DatePlanned
FROM      [Computer] 
INNER JOIN
          [Planned] ON [Computer.ComputerID] = [Planned.ComputerID] 
INNER JOIN
          [User] ON [Computer].UserID = [User].UserID
WHERE     (DATEDIFF(dd, GETDATE(), [Planned.DateAvailable]) < 10) 
          AND Planned.IsPlannable = 1

撰写,根据此视图的结果,在此应用程序的C#代码中显示相应的消息

graph of the structure

2 :) 在视图中撰写sql-server上的整个消息并返回类似

的内容
[EmailTo]
[Subject]
[Body]

然后只迭代结果并从中创建MailMessage个对象

在这两种情况下我都收到如下消息:

foreach (vwGetInvitableComputer u in UserController.GetAllInvitableUsers())
{
    // where the usercontroller wraps the Subsonic logic.
    // the composition happens here
}

在C#代码中迭代,然后从预先格式化的数据中编写mailmessage。

选择性能和资源的场景是什么?

更新:在选项2中的数据库中确实存在文本操作。但是,这会将messagbody中的三个字符串替换为CompterName,DateStart和DateEnd。也许,SQL视图足够聪明为此传播性能,而c#代码“在请求时”执行此操作?

2 个答案:

答案 0 :(得分:3)

首先考虑:您是否可以设想更改电子邮件格式的时间?如果不是那么它可能无关紧要。

第二个考虑因素:你能想象一下电子邮件需要比SQL更容易提供的更多操作吗?如果是这样,那么你一定要选择C#。

第三个考虑因素:重新部署对环境有多大问题?

最后一个替代选项:使用C#进行邮件撰写,但使用可以轻松更新的基于数据库或文件的模板。

答案 1 :(得分:0)

我会选择选项2,使用视图或存储过程编写在服务器上传递电子邮件所需的所有信息。理想情况下,数据库调用应尽可能减少到服务器的往返次数。