У меня есть 2 таблицы (модели) - Student, StudentLogs.Обе таблицы имеют одинаковые поля с одинаковыми именами.кроме таблицы StudentLogs будут поля DateChanged и NameChangedBy.
Таким образом, когда я обновляю поле ученика - т.е. Имя, оно записывает изменения в таблицу StudentLog и кто.У меня есть другие таблицы, такие как классы, учителя и т. Д. Поэтому мне нужна одна функция для регистрации всех изменений для каждого типа (classesLog, teacherLog и т. Д.)
В моем контроллере ученика я передаю модель ученика контроллеру в LogEntryконструктор как параметр объекта.(Могу ли я передать модель в качестве параметра или она передается как объект?)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("StudentId, Name, Address, DOB")] Student student)
{
if (ModelState.IsValid)
{
try
{
_context.Update(student);
LogEntry logE = new LogEntry(_context, student, "Edit");
if (logE.HasLog)
{
_context.Update(studentLog); // <-- Something like this
}
await _context.SaveChangesAsync();
}
catch (...)
{
...
}
return RedirectToAction(nameof(Index));
}
}
Затем у меня есть отдельный класс для выполнения функций, таких как записи в журнале и т. Д., Который называется LogEntry.cs.Этот класс примет имя модели (Student) и будет перебирать другие модели, проверяя таблицу с журналами после имени, чтобы можно было выбрать StudentLogs.таким образом, он будет делать то же самое для классов, учителей и т. д., чтобы увидеть, существует ли эта таблица.в этом случае он вернет таблицу в контроллер, а затем обновит обе модели с помощью
await _context.SaveChangesAsync();
. Класс LogEntry выглядит примерно так:
public class LogEntry
{
private dbContext _context;
private string logOperation;
private string modelName;
public LogEntry(dbContext Context, object Model ,string LogOperation)
{
_context = Context;
logOperation= LogOperation;
modelName += (Model.ToString().Replace("Project.Models.", "")) + "Logs";
}
public bool HasLog ()
{
if (Type.GetType(modelName).exits??) // <-- Not sure if possible
{
return true;
}
return false;
}
}
Это лучший способ?сделать это?или я буду обновлять их отдельно в каждом контроллере?что касается создания, редактирования, удаления
, возможно, есть функция для обновления, а также проверка наличия таблицы журнала
public object UpdateLog ()
{
return Model; // return the model of the log and update it in the controller or class. not sure whats best
}