1

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 は次のエラーを返します: Ingredient 型のオブジェクトに ICollection`1 型のプロパティが見つかりません。クラス Ingredient には IList 型のプロパティがあるため、混乱します。List、IList、IEnumerable、および考えられるほぼすべてのタイプのコレクションを試しましたが、どれも機能しませんでした。

何がうまくいかないのか分かりますか?

4

2 に答える 2

0
 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 メンバーに [Column] を配置する必要があることを知りました。

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
    ";

Nポコルール!!!

于 2016-05-05T17:27:01.220 に答える