c# - PetaPoco 能否填充一个包含多个 POCO 的 View 模型列表?

标签 c# asp.net-mvc petapoco

如果可能的话,我想用一个查询填充 CharacterViewModel 列表,但我不确定如何,也不确定 PetaPoco 是否可以做这样的事情。这是对象和查询的样子:

    public class CharacterViewModel
{
    public Character Character { get; set; }
    public Entity Entity { get; set; }
    public Faction Faction { get; set; }
}


var characters = db.Query<CharacterViewModel>(
    @"SELECT c.*,e.*,f.*
        FROM [Character] c
        INNER JOIN [Entity] e ON e.Id = c.EntityId
        INNER JOIN [Faction] f ON f.Id = e.FactionId
        WHERE c.UserId = @0", 1)

我需要以某种方式告诉 PetaPoco 将每个 JOIN 映射到 View 模型中的相应 POCO。这是可能的还是我的做法有误?

最佳答案

如下修改您的 POCO:

public class Faction 
{
  // Other properties

  [PetaPoco.ResultColumn]
  public Entity Entity { get; set; }
}


public class Entity
{
  // Other properties

  [PetaPoco.ResultColumn]
  public Character Character{ get; set; }
}


public class Character
{
  // Properties of character object
}

按如下方式修改您的查询语法:

var sql = Sql.Builder
       .Append("SELECT c.*,e.*,f.*")
       .Append("FROM [Character] c")
       .Append("INNER JOIN [Entity] e ON e.Id = c.EntityId")
       .Append("INNER JOIN [Faction] f ON f.Id = e.FactionId")
       .Append("WHERE c.UserId = @0", 1)");


var characters = db.Query<Character, Entity, Faction, Faction>(
       (c, e, f) => { f.Entity = e; e.Character = c; return f;}, sql);

这应该返回 Faction 对象的对象图。注意第四个参数(Faction)是集合中item的返回类型。

关于c# - PetaPoco 能否填充一个包含多个 POCO 的 View 模型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089931/

相关文章:

c# - 调度方法调用 C#

c# - 如何在 asp :DropDownList 中默认选择值

c# - 显示错误输出的结构的 Marshal.SizeOf

javascript - 我可以在 asp.net-mvc 3 中的 @Ajax.Actionlink 中传递 Javascript 变量吗?

javascript - 从 JSON 响应创建一个可观察的敲除数组

.net - 如何对使用 PetaPoco.Database 的服务进行单元测试

tsql - PetaPoco INSERT with @ in the string

c# - MVC Onion 架构,一些问题

c# - 无法在 MVC 5 中为 Html.DropDownList 设置默认值

c# - 如何使用 lambda 表达式和匿名类型获取类型的属性名称?