C# 如何在dapper中包含具有泛型列表属性和引用类型属性的对象?

C# 如何在dapper中包含具有泛型列表属性和引用类型属性的对象?,c#,dapper,dapper-extensions,C#,Dapper,Dapper Extensions,我的班级是: public class Person { public int Id { get; set; } public string Name { get; set; } public List<Address> Addresses { get; set; } public BankAccount Account { get; set; } } public class Address { public string Street

我的班级是:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Address> Addresses { get; set; }
    public BankAccount Account { get; set; }
}

public class Address
{
     public string Street { get; set; }
     public string City { get; set; }
     public string Zipcode { get; set; }
} 

public class BankAccount
{
      public decimal Balance {get; set;} 
      public DateTime LastDateWithdrawn { get; set;}
}
公共类人物
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表地址{get;set;}
公共银行帐户{get;set;}
}
公共课堂演讲
{
公共字符串Street{get;set;}
公共字符串City{get;set;}
公共字符串Zipcode{get;set;}
} 
公营银行帐户
{
公共十进制余额{get;set;}
公共日期时间LastDateRetracted{get;set;}
}
使用多重映射或我已经尝试过的多重结果是不可能的。 你是怎么做到的?
如果我可以使用多重映射或多重结果或任何其他选项,我希望实现的是不要往返数据库以获取地址和银行帐户。

通过阅读您的评论,我已经尝试给您答案

假设这里有一个SP

Create PROCEDURE [dbo].[GetPersonDetail]
(
    @PersonId int
)
AS  
SET NOCOUNT ON
BEGIN

    -- 1). Get Person detail
    Select * from PersonMaster Where PersonId = @PersonId


    -- 2). Get Person Addrss
    Select * from PersonAddress Where PersonId = @PersonId

    -- 1). Get Person BankAccount
    Select * from BankAccount Where PersonId = @PersonId

End
这里是您的简洁方法,它使用了QueryMultiple简洁方法

public Person GetPersonDetail(int PersonId)
{
    try
    {
        var oPara = new DynamicParameters();
        oPara.Add("@PersonId", PersonId, dbType: DbType.Int);

        var person = new Person();
        using (var multiResults = _connection.QueryMultiple(GetPersonDetail, oPara, commandType: CommandType.StoredProcedure))
        {
            person.Person = multiResults.Read<Person>().FirstOrDefault();
            person.Addresses = multiResults.Read<Address>();
            person.BankAccount = multiResults.Read<BankAccount>().FirstOrDefault();
        }
        return person;
    }
    catch (Exception ex)
    {
        thow;
    }
}
公众人物GetPersonDetail(intPersonId)
{
尝试
{
var oPara=新的动态参数();
添加(“@PersonId”,PersonId,dbType:dbType.Int);
var person=新的person();
使用(var multiResults=_connection.QueryMultiple(GetPersonDetail、oPara、commandType:commandType.storedProcess))
{
person.person=multiResults.Read().FirstOrDefault();
person.Addresses=multiResults.Read();
person.BankAccount=multiResults.Read().FirstOrDefault();
}
返回人;
}
捕获(例外情况除外)
{
透;
}
}

希望这能帮助你。。。祝你一切顺利。

看看你的班级,很难帮到你。让我们看看你到目前为止做了什么。你到底想要实现什么???@Krishnajrana我编辑了我的问题。。谢谢好的,这意味着您希望获得多个结果集并将其绑定到Person类,对吗???@Krishnajrana我正在尝试从数据库中获取Person对象及其地址和银行帐户,但往返次数最少或不可能。@Krishnajrana是的,但为了让我获取地址和银行帐户(两者都有外键:PersonId)我必须首先获取Person对象并使用其Id属性。dapper dot net网站中的样本是预先确定的客户id,订单。。etc@JohnPatrickPo:很高兴它能帮助你,如果你能接受它作为答案,谢谢你……:)我确实这么做了,但我打算将其修改为一个sql查询,我不希望数据库中有任何SP。。但是谢谢!