#c# #asp.net #sql-server
Вопрос:
Попытка сохранить список пользователей (объектов) в базе данных и отправить письмо получателю с тем же списком. Я использую MSSQL и C# для своего проекта. Приведенный ниже код успешно выполняется, если я намерен сохранить только одного пользователя. Но у меня возникли проблемы с сохранением списка пользователей. Я прошу помочь мне с некоторыми идеями о том, как достичь следующего. Спасибо.
public class ExportService{
public string SendImportStatus(List<Import> users)
{
Let<Notification>().SaveListToSendEmail(users);
return null;
}
}
public class Notification{
public void SaveListToSendEmail(List<Import> users)
{
if (IsNullOrEmpty(users))
{
return;
}
SendEmailBody(actedBy, users);
}
}
private void SendEmailBody(List<Import> users)
{
var getManagers = Let<User>().GetAll();
var type = NotificationType.ModuleImport;
var recipientEmails = getManagers .Select(model => model.Email);
var emailToList = string.Join(";", recipientEmails);
var template = Let<EmailTemplate>().GetItemByCode(EnumHelper.GetDescription(type));
var fileName = users.Select(x => x.FileName).First();
var notification = new NotificationM()
{
Type = type,
To = emailToList
};
notification.Value = new
{
ModuleCode = fileName,
list = users //[{"Id":"A","Status":"Success},{"Id":"B","Status":"Fail"},..]
};
var recipient = BuildRecipient(template, notification);
Let<Recipient>().Save(recipient, actedBy);
}
}
Построение получателя с вышеуказанными данными.
protected RecipientDM BuildRecipient(EmailTemplateDM template, NotificationM notificationM)
{
var subject = StringHelper.Fill(template.GetSubject(), notificationM.Value);
var body = StringHelper.Fill(template.GetContent(), notificationM.Value);
return BuildRecipient(notificationM.Id, notificationM.Type, recipient =>
{
recipient.To = notificationM.To;
recipient.Cc = notificationM.Cc;
recipient.Bcc = notificationM.Bcc;
recipient.Subject = subject;
recipient.Body = body;
});
}
Вспомогательный класс String, на данный момент он может хранить значение ModuleCode
в базе данных. Но я не могу понять, как сохранить список.
public static string Fill(object value)
{
var pairs = ConvertHelper.ToPairs(value);
foreach (var key in pairs.Keys)
{
var text = pairs[key] == null ? string.Empty : pairs[key].ToString();
template = Regex.Replace(template, $"##{key}##".Trim(), text, RegexOptions.IgnoreCase);
}
return template;
}
В столбце базы Body
данных это жестко закодировано, где ##ModuleCode##
и ##list##
будет заменено.
'<p>Dear Manager(s), <br /> <br />Module - ##ModuleCode## - is imported.<br /><br /><h3>Please find More Details below</h3><br />
<table><tr><td>##list##<td></tr></table>
Я ожидаю следующего результата по электронной почте.
Dear Manager(s),
Module - abc is imported
Please find more details below.
---------------
| A | Success |
| B | Failure |
---------------
Комментарии:
1. «У меня возникли проблемы с сохранением списка пользователей» — Какие конкретные «проблемы» у вас возникли? Если вам удалось успешно сохранить одну запись, что мешает вам повторить эту операцию?
2. @David Я получаю
<table><tr><td> System.Collections.Generic.List`1[App.BLL.Notification SendEmail]
</td</tr></tr></table> при сохранении его в моей базе данных.3. Тогда, по-видимому, вы пытаетесь рассматривать весь список как одну запись, где вместо этого вам, вероятно, следует зацикливаться на списке и обрабатывать отдельные записи.
4. @Дэвид Да, я понимаю тебя, но я все еще немного сбит с толку. Ваша любезная помощь будет высоко оценена.
5. Код, показанный в вопросе, очень разрознен и полон опечаток, поэтому я мало что могу вам дать для конкретных рекомендаций. Сведите проблему только к тому, где вы используете
List
записи. Где это вообще есть в коде? Я не вижуList
нигде? Хотя я вижу несколько вариантов использованияobject
, что подразумевает, что вы вообще не полагаетесь на типы должным образом. Но, предположительно, где -то в вашем коде у вас есть несколькоList
записей, и вы передаете всеList
это своему процессу. Вместо этого напишите цикл для повторения этогоList
и передайте каждый объект этому вашему процессу.