如何按名称返回模型?

时间:2018-06-05 15:40:12

标签: c# asp.net-core entity-framework-core

我有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
}

0 个答案:

没有答案