我想在将某个项目分配给某个类别时发送通知电子邮件,但它只应在第一次出现时发生。对项目的后续类别分配不需要发送通知。
有一个'链接'将类别分配给项目时将标记为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();
}
}
代码显然有问题。有什么想法吗?
答案 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();
}
}