Как получить dbCOntext в статическом методеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как получить dbCOntext в статическом методе

Сообщение Anonymous »

Я создаю веб-сайт EF Core. Он отправляет электронные письма асинхронно. Иногда по какой-либо причине электронная почта не работает. Я указываю обратный вызов, который обнаруживает ошибку и в настоящее время записывает информацию во временный файл, когда электронное письмо не удается. Это работает.
Вместо этого я хочу иметь возможность обновлять свою базу данных, но у меня нет доступа к dbContext из статического метода обратного вызова. Я попытался передать dbContext в объект обратного вызова, но он был удален при выполнении обратного вызова.

Код: Выделить всё

       SmtpClient client = new SmtpClient(Server, Port);
client.EnableSsl = this.SendTls;
//--------------------------------
//  Create credentials
//--------------------------------
System.Net.NetworkCredential cs = new System.Net.NetworkCredential(User, Password);
client.Credentials = cs;

//----------------------------------------------------------------------------------
// Before we send, lets write the email log so we will have an ID of the message...
//----------------------------------------------------------------------------------
int id = EmailHistory.WriteEmailLog(db, DateTime.UtcNow, mm.To, mm.From, mm.Subject, mm.Body, mm.CC, mm.Bcc, mm.ReplyToList, false);

//-------------------------
// Now send the email async with postback
//-------------------------
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
string fileName = FileHelper.GetTempFileName(_ctx, "Error", "txt");
CallBackObject cbo = new CallBackObject(mm, db, fileName, id);
client.SendAsync(mm, cbo);

public class CallBackObject
{
public MailMessage mm;
public dbContext db;
public string fileName;
public int mailLogId;
public CallBackObject(MailMessage _mm, dbContext _db, string _fileName, int id)
{
mm = _mm;
db = _db;
fileName = _fileName;
mailLogId = id;
}
}
//--------------------------------------------------------------
// Come here when the send completes.  Clean up any attachments
//--------------------------------------------------------------
static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
CallBackObject cbo = (CallBackObject)e.UserState;
//------------------------------------------------------
// User state is the mail message that orifinalted it
//------------------------------------------------------
MailMessage mm = cbo.mm;

//dbContext db = new dbContext();

//------------------------------------------------------
// Now clean up any attachments by deleting temp files.
//------------------------------------------------------
if (mm.Attachments != null)
{
foreach (Attachment f in mm.Attachments)
{
f.Dispose();
FileHelper.DeleteTempFile(f.Name);
}
}
if (e.Error != null)
{
FileHelper.WriteTextFile(cbo.fileName, $"Email Error:
{e.Error.Message}\nTo:{mm.To}\n{mm.Subject}\nInner
Exception:{e.Error.InnerException}\nStack:
{e.Error.StackTrace}\nSource:{e.Error.Source}");

Есть ли способ создать dbContext с настройками базы данных моего приложения из статического метода? Я видел подобные сообщения, но не понял ответов.

Подробнее здесь: https://stackoverflow.com/questions/784 ... tic-method
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»