使用带继承的DapperExtensions时遇到了一些问题。
我有一些基类和两个子类
class Base
{
public string Name {get; set;}
}
class A : Base {}
class B : Base {}
和获取A类或B类列表到Base的方法(只有A或B,如果重要则不混合)
public List<Base> GetData()
{
if(something)
{
var data = GetAClasses();
return data.ConvertAll(x=>(DataItemBase)x);
}
else
{
var data = GetBClasses();
return data.ConvertAll(x=>(DataItemBase)x);
}
}
我为每个子类使用DapperExtensions设置映射
public class TableMapping_A : ClassMapper<A>
{
public TableMapping_A()
{
base.Table("TableA");
base.AutoMap();
}
}
public class TableMapping_B : ClassMapper<B>
{
public TableMapping_B()
{
base.Table("TableB");
base.AutoMap();
}
}
主程序是这样的
List<Base> data = GetData();
public void Save<T>(List<T> data) where T : Base
{
connection.Insert<T>(data);
}
问题是当我尝试连接时。插入。 Dapper想要插入“Base”表而不是插入子类的映射表中。
当我尝试在“保存”方法中手动获取表名时,同样的问题
DapperExtensions.DapperExtensions.GetMap<T>()
实际上我可以将GetMap(Type entityType)方法添加到DapperExtensions中,使用此方法我可以使用
获取正确的表名DapperExtensions.DapperExtensions.GetMap(data[0].GetType());
但它没有解决插入问题。
对此有何建议?有什么办法可以解决这个问题吗?也许我对继承有一些问题?
谢谢, 并且抱歉很长的问题