使用DapperExtensions插入子类(继承的类)

时间:2017-08-03 21:13:41

标签: c# dapper dapper-extensions

使用带继承的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());

但它没有解决插入问题。

对此有何建议?有什么办法可以解决这个问题吗?也许我对继承有一些问题?

谢谢, 并且抱歉很长的问题

0 个答案:

没有答案