【问题标题】:How to use Npoco FetchOneToMany?如何使用 Npoco FetchOneToMany?
【发布时间】:2012-10-12 17:54:55
【问题描述】:

我正在尝试使用Npoco,但在使用 FetchOneToMany 时遇到了一些问题

我有一个 sql 语句将 2 个表连接在一起,并输出所有列。

   [TableName("TableA")]
    [PrimaryKey("Id")]
    public class TableA
    {
        public int Id { get; set; }
        public DateTime EffectiveDate { get; set; }
         public IList<TableB> TableBs { get; set; }
    }

    [TableName("TableB")]
    [PrimaryKey("TableBId")]
    public class TableB
    {
        public int TableBId { get; set; }
        public int SomeNumber { get; set; }
          public int Id { get; set; } // TableA id
    }


Func<TableA, object> func1 = (x) => x.Id;
            Func<TableB, object> func2 = (x) => x.Id;
  var test = RelationExtensions.FetchOneToMany<AdminFeeBandGroup, AdminFeeBand>(unitOfWork.Db, func1,func2,sql, 1,1,"10-18-2012","10-22-2012");

我在我的真实查询中传递了 4 个参数。我得到了一个结果,TableBs property 被填满并且看起来不错。但是 EffectiveDate 由于某种原因没有填写,是默认的 C# 时间。

我错过了什么?

编辑

这就是我的查询

SELECT     TableA.Id, TableA.EffectiveDate, TableB.TableBId, TableB.SomeNumber
FROM         TableA INNER JOIN
                      TableB ON TableA.Id = TableB.Id
WHERE     (TableA.EffectiveDate = @0)


Func<TableA, object> func1 = (x) => x.Id;
            Func<TableB, object> func2 = (x) => x.Id;
  var test = RelationExtensions.FetchOneToMany<AdminFeeBandGroup, AdminFeeBand>(unitOfWork.Db, func1,func2,sql, "10-18-2012");

【问题讨论】:

  • 我不能发布真正的 Sql 但我可以让它看起来完全一样。

标签: c# .net petapoco npoco


【解决方案1】:

它应该是这样工作的。

var sql = "select a.*, b.* from tablea a 
    inner join tableb b on a.id = b.id 
    where EffectiveDate = @0"

List<TableA> results = 
    db.FetchOneToMany<TableA,TableB>(x=>x.Id, sql, new DateTime(2012,10,18))

您必须确保以与列出通用参数相同的顺序选择列。

【讨论】:

  • 我不确定您所说的“确保您的列的选择顺序与列出通用参数的顺序相同。”
  • a.*, b.* 与 的顺序相同 ...tableA 列在 B 之前。
  • 是的,这就是问题所在。在旁注中,您在 npoco 中拥有的那个和您所做的另一个关系扩展有什么区别?
猜你喜欢
  • 2014-09-28
  • 2014-03-09
  • 2014-02-03
  • 2016-10-16
  • 1970-01-01
  • 2012-12-20
  • 2014-10-03
  • 2016-06-12
  • 2016-08-26
相关资源
最近更新 更多