我试图使用NPoco的fetchOneToMany方法将一个对象映射为一个嵌套对象列表,如下所示的此链接:
[TableName("sds_ingredients_ing")]
[PrimaryKey("ing_id")]
public class Ingredient
{
[Column(Name = "ing_id")]
public int Id { get; set; }
[Column(Name = "ing_cas")]
public string Cas { get; set; }
[Ignore]
public IList<IngredientLang> Ingredient_Lang;
}
[TableName("sds_ingredients_lang")]
[PrimaryKey("ing_id")]
public class IngredientLang
{
[Column(Name = "ing_id")]
public int Id { get; set; }
[Column(Name = "lang_id")]
public int LangId { get; set; }
[Column(Name = "Name")]
public string Name { get; set; }
}下面是一个查询:
List<Ingredient> list = db.FetchOneToMany<Ingredient, IngredientLang>(x => x.Id,
@"SELECT ing.*,
lang.*
FROM SDS_INGREDIENTS_ING ing
LEFT JOIN SDS_INGREDIENTS_LANG lang
ON ing.ING_ID=lang.ING_ID");Npoco返回以下错误:在IList类型的对象上找不到ICollection`1‘1类型的属性,这让我感到困惑,因为类成分确实具有类型为IList的属性。我们已经尝试过List、IList、IEnumerable以及我们能想到的几乎每一种类型的集合,但它们都没有起作用。
你知道可能出了什么问题吗?
发布于 2014-08-06 12:30:35
Ingredient_Lang不是一个属性。这是个领域。如果你让它成为一种财产,它应该能工作。
发布于 2016-05-05 17:27:01
public partial class Graph
{
[Reference(ReferenceType.Many, ColumnName = "GraphId",
ReferenceMemberName = "GraphId")]
[Column] public List<Plot> Plots { get; set; }
...
[TableName("Graph")]
[PrimaryKey("GraphId")]
[ExplicitColumns]
public partial class Graph : fooDB.Record<Graph>
{
...在遍历了NPoco 3.2.0的源代码之后,我了解到在调用FetchOneToMany之后,需要将列放在List成员上,以便在类中引出预期的子父级:
results = tdb.FetchOneToMany<Graph>(g => g.Plots, _plotsByReview, reviewId);此外,在父列之后,选择列与子列保持连续:
private static string _plotsByReview = @"
select
g.GraphId,
g.GraphName,
g.UserId,
g.Shared,
g.ReviewId,
p.PlotId as Plots__PlotId,
p.GraphId as Plots__GraphId,
p.TagId as Plots__TagId,
p.YAxis as Plots__YAxis,
p.Relabel as Plots__Relabel,
p.Scale as Plots__Scale,
p.MinY as Plots__MinY,
p.MaxY as Plots__MaxY
from [Graph] g
inner join [Plot] p on p.GraphId = g.GraphId
where g.ReviewId = @0
";NPoco规则!
https://stackoverflow.com/questions/25149238
复制相似问题