在第一次更新项目时发送电子邮件通知

时间:2014-07-16 05:44:29

标签: c# asp.net linq

我想在将某个项目分配给某个类别时发送通知电子邮件,但它只应在第一次出现时发生。对项目的后续类别分配不需要发送通知。

有一个'链接'将类别分配给项目时将标记为true的字段。尝试使用if (item.Linked == true)条件作为触发器,但每次添加或删除类别时都会发送通知。

到目前为止,这是代码:

private void UpdateItemCategories(Item item, ItemViewModel viewModel)
{
    var itemCategories = item.Categories.ToList();
    foreach (var category in itemCategories)
    {
        if (!viewModel.Categories.Any(t => t.CategoryId == category.CategoryId))
        {
            item.Categories.Remove(category);
            if (issue.Solutions.Count == 0)
            {
                issue.Linked = false;
            }
        }
    }

    foreach (var category in viewModel.Categories)
    {
        if (!itemCategories.Any(t => t.CategoryId == category.CategoryId))
        {
            var itemCategory = category.ToCategory();
            db.Categories.Attach(itemCategory);
            item.Categories.Add(itemCategory);
            item.Linked = true;
        }
    }

    if (item.Linked == true)
    {
        //Send notification e-mail
        UserMailer.Notification(item).Send();
    }
}

代码显然有问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的逻辑不正确。每当更新项目类别时,您应检查项目类别是否第一次更新。您只需检查您的商品是否已经关联,即可查看。

代码中的更正:

private void UpdateItemCategories(Item item, ItemViewModel viewModel)
{
    //Check whether item is already linked with some category
    bool sendEmail;
    if(item.Linked == false)
    {
      sendEmail=true;
    }
    //Above code is for your understanding. you can simply use: bool sendEmail = !item.Linked;

    var itemCategories = item.Categories.ToList();
    foreach (var category in itemCategories)
    {
        if (!viewModel.Categories.Any(t => t.CategoryId == category.CategoryId))
        {
            item.Categories.Remove(category);
            item.Linked = false;
        }
    }

    foreach (var category in viewModel.Categories)
    {
        if (!itemCategories.Any(t => t.CategoryId == category.CategoryId))
        {
            var itemCategory = category.ToCategory();
            db.Categories.Attach(itemCategory);
            item.Categories.Add(itemCategory);
            item.Linked = true;
        }
    }

    if (sendEmail)
    {
        //Send notification e-mail
        UserMailer.Notification(item).Send();
    }
}