Как вернуть модель по имени? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...