2016-11-01 6 views
0

を働いていない、私は多くの役割nPoco V3 - 多くの多くは

public class User 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
    public List<Role> Roles {get;set;} 
} 

public class Roles 
{ 
    public int Id {get;set;} 
    public string Key{get;set;} 
} 

public class UserRoles 
{ 
    public int UserId {get;set;} 
    public int RoleId {get;set;} 
} 

を持つユーザーを持っているもの、私が達成しようとすることは、1つのクエリ内のすべての役割を持つユーザーを取得し、これまでのところ、私は失敗しています。私はカスタムConventionbasedマッパーを使用してマッピングするための

を(私は、コードを提供することができますが、それはかなり大きいです)私はFetchOneToManyを試してみましたが、ここではhttps://github.com/schotime/NPoco/wiki/One-to-Many-Query-Helpers https://github.com/schotime/NPoco/wiki/Version-3

を説明した。しかし役割が常にあるように私は取得しようとしました空の。それ自体で 役割とユーザーが正しくマップされていると私は再びそれは役割が空で、助けにはならなかった

For<User>().Columns(x => 
     { 
      x.Many(c => c.Roles); 
      x.Column(c => c.Roles).ComplexMapping(); 
     }, true); 

のような関係を指定しようとしました。

私は何が欠けているのか分かりません。 アイデア

答えて

0

複合マッピングとリレーションシップマッピング(1対n、n対n)は2つの異なるものです。

ComplexMappingは、通常、1対1の関係が存在する同じテーブルにあるデータのネストされたオブジェクトをマッピングするためのものです。このようなもののために:あなたは規則ベースのマッパーを使用している場合

public class Client 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Address Address { get; set; } 

    public Client() 
    { 
     Address = new Address(); 
    } 
} 

public class Address 
{ 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string PostalCode { get; set; } 
    public string Telephone { get; set; } 
    public string Country{ get; set; } 
} 

はあなたのオーバーライドは次のようになります。大会ベースマッパーを使用した場合を監視する

For<Client>().Columns(x => 
{ 
    x.Column(y => y.Address).ComplexMapping(); 
}); 

一つのことを。次のコードを使用してスキャナでComplexMappingを有効にする必要があります。

scanner.Columns.ComplexPropertiesWhere(y => ColumnInfo.FromMemberInfo(y).ComplexMapping); 

そうでない場合ComplexMappingは、()は単に無視されますあなたの上書きで呼び出します。

一対多のマッピングは次のように動作します(詳細についてNPoco on Githubを参照してください):

For<One>() 
    .TableName("Ones") 
    .PrimaryKey(x => x.OneId) 
    .Columns(x => 
    { 
     x.Column(y => y.OneId); 
     x.Column(y => y.Name); 
     x.Many(y => y.Items).WithName("OneId").Reference(y => y.OneId); 
    }, true); 

For<Many>() 
    .TableName("Manys") 
    .PrimaryKey(x => x.ManyId) 
    .Columns(x => 
    { 
     x.Column(y => y.ManyId); 
     x.Column(y => y.Value); 
     x.Column(y => y.Currency); 
     x.Column(y => y.OneId); 
     x.Column(y => y.One).WithName("OneId").Reference(y => y.OneId, ReferenceType.OneToOne); 
    }, true);