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
属性)
如果您希望域模型不这样做:没关系 - 但您可能需要一个不同的对象来与数据库对话,即您的域模型和数据库模型不需要是同一件事。
我正在将 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
属性)
如果您希望域模型不这样做:没关系 - 但您可能需要一个不同的对象来与数据库对话,即您的域模型和数据库模型不需要是同一件事。