Dapper Resolve Invalid cast 异常

Dapper Resolve Invalid cast exception

我正在将 Dapper 与 MySql 结合使用来获取具有多重映射的 uTeacher 列表,但我无法让它工作!我得到从 Int32 到 uDepartement class 和其他 classes!!

的无效转换异常

(DataException:解析第 33 列时出错(部门=1 - Int32))

我有以下 类:

public class uTeacher : uPerson
{
        public uTeacher() { } 

        public uPosition Position { get; set; }
        
        public uFaculty Faculty { get; set; }

        public uDepartment Department { get; set; }

        public IList Modules { get; set; }
}

+--uTeacher------------+
| int Id
| ....
| uDepartment Department
| uPosition Position
| uFaculty Faculty
| IList Modules
+---------------------

+-uDepartment -+    +--uPosition --+   +--uFaculty --+   +--uModule--+
| int Id            | int Id           | int Id          | int Id
| ...               | ...              | ...             | ...
| IList Teachers    | IList Teachers   | IList Teachers  | uTeacher Teacher 
+--------------

我的 GetAll 方法:

public Task<IEnumerable<uTeacher>> GetAllAsync()
        {
            var select = $@"select * 
                        from uTeacher t
                        left join uDepartement d on d.Id = t.Department 
                        left join uPosition p on p.Id = t.Position
                        left join uFaculty f on f.Id = t.Faculty
                        left join uModule m on m.Teacher = t.Id ";    //many

            var result =
                Connection.QueryAsync<uTeacher, uDepartment, uPosition, uFaculty, uModule, uTeacher>(
                    select, (t, d, p, f, m) =>
                    {
                        t.Department = d;
                        t.Position = p;
                        t.Faculty = f;
                        t.Position = p;
                        t.Modules.Add(m);
                        return t;
                    }, splitOn: "Id,Id,Id");
            return result;
        }

我喜欢使用 dapper,但我被困在这里,我在这上面花了很多时间,但不知道发生了什么。

编辑

当我 运行 没有映射

时,我得到了同样的异常
public Task<IEnumerable<uTeacher>> GetAllAsync(){
return Connection.QueryAsync<uTeacher>("Select * from univteacher");
}

!!

Dapper 正在查看名为 Department 的列,并试图将该值填充到 属性 中,即 称为 Department ,这意味着它正试图将数据库中的 int 放入 属性:

public uDepartment Department { get; set; }

哪个:效果不好。我可能会建议使对象 与数据库 匹配,即类似于:

public int Department { get; set; }

(可能还有 public uDepartment DepartmentObject 属性)

如果您希望域模型不这样做:没关系 - 但您可能需要一个不同的对象来与数据库对话,即您的域模型和数据库模型不需要是同一件事