Получить фактический тип модели из динамического типа

#asp.net-core #dynamic #asp.net-dynamic-data

Вопрос:

У меня в базе данных есть три таблицы (Студент, Курс, Все). Когда я добавляю какие-либо данные в таблицу «Студент и курс», данные также добавляются во все таблицы.

Итак, я использую данные динамического типа для передачи данных типа «Студент» и «Курс» для сохранения во всей таблице.

 public IActionResult Add(Student model) 
{   ... 
 bool studentData = _studentService.Add(model); //saving in Student table 
 bool allData= _allService.AddAll(model); // passing 'Student' type data 
   ... 
}
 

В службе » Все » у меня есть такая функция, как-

 public bool AddAll(dynamic model) // 'Student' type data passed amp; received as dynamic 
{...}
 

Теперь мне нужна подробная информация о типе модели студента (название таблицы, общее количество найденных данных и т.д.).

Есть ли какой-нибудь способ получить его? И можно ли получить информацию о типе модели студента или курса, если я использую динамический тип данных?

Любое предложение или помощь будут высоко оценены 🙂 Заранее спасибо!

Ответ №1:

Если вы хотите получить тип модели,вы можете использовать model.GetType() ,и вы можете использовать model.GetType().Name ,чтобы получить имя типа модели, вот демонстрационная версия:

Модель:

 public class Student
    {
        public int StudentId { get; set; }
        public string StudentName { get; set; }

    }

    public class Course
    {
        public int CourseId { get; set; }
        public string CourseName { get; set; }

    }
 

Экшен:

 public void Add(Student model)
        {
            //Student s = new Student { StudentId=1, StudentName="s1" };
            Course c = new Course { CourseId=1,CourseName="c1" };
            bool allData = AddAll(c);
        }
        public bool AddAll(dynamic model)
        {
            var type = model.GetType();
            var typeName = type.Name;
            return true;
        }
 

Результат:
введите описание изображения здесь

Ответ №2:

Этот пример демонстрирует, что вы пытаетесь сделать ?

 // Some dummy classes
public class Student
{
    public string Name { get; set; }

    public Student(string name)
    {
        Name = name;
    }
}

public class Course
{
    public string Title { get; set; }

    public Course(string title)
    {
        Title = title;
    }
}

// put the method somewhere
private string TypeCasting(dynamic myContent)
{
    if (myContent is Student littleStudent)
    {
        return littleStudent.Name;
    }
            
    if (myContent is Course someLovelyCourse)
    {
        return someLovelyCourse.Title;
    }

    return string.Empty;
}

// Example using
var student = TypeCasting(new Student("fossil"));
var course = TypeCasting(new Course("type casting"));