我有2张桌子(型号) - 学生,学生日志。两个表都具有相同的相同字段。除了StudentLogs表将有一个DateChanged和NameChangedBy字段。
因此,当我更新学生字段 - 即姓名时,它会向StudentLog表写入更改以及由谁更改。我有其他表,如类,教师等。所以我需要一个函数来记录每种类型的所有更改(classesLog,teachersLog等)
在我的学生控制器中,我将学生模型作为Object参数传递给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的记录条目等功能。 此类将采用模型(学生)的名称并迭代其他模型,并在名称后检查具有日志的表,以便拾取StudentLogs。所以它基本上会对类,教师等做同样的事情来查看该表是否存在。 如果是这样,它会将表返回给Controller,然后用
更新两个模型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
}