1

リンクのテーブルがあり、一部のリンクは子リンクになり、親リンク ID を参照しますが、servicestack ormlite に頭を悩ませ、子のプロパティを設定することはできません。すべてのリンクのリストを取得すると、すべての子リンクになります。

これが私のモデルです:

public partial class Navigation
{
   [Alias("Id"), AutoIncrement]
   public int Id  { get; set; }

   [Alias("ParentId")]
   [Display( Name = "ParentId")]
   [References(typeof(Navigation))]
   public int? ParentId  { get; set; }

   [Alias("LinkText")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "LinkText")]
   public string LinkText  { get; set; }

   [Alias("Action")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "Action")]
   public string Action  { get; set; }

   [Alias("Controller")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "Controller")]
   public string Controller  { get; set; }

   [Alias("Area")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "Area")]
   public string Area  { get; set; }

   [Alias("Visible")]
   [Display( Name = "Visible"),Required(ErrorMessage = " is required" )]
   public bool Visible  { get; set; }

   [Alias("Sequence")]
   [Display( Name = "Sequence")]
   public int? Sequence  { get; set; }

   [ForeignKey(typeof(Navigation))]
   public virtual ICollection<Navigation> Children { get; set; }
}

何か案は ?

4

2 に答える 2

4

継承を使用してそれを行うことができます。親クラスには、子クラスへの参照が含まれます。どのユーザーが各ユーザーを作成したかを取得するためにそれを使用する必要がありました。サンプルは次のとおりです。

public class UserCommon
{
    [References(typeof(User))] // Self reference workaround for User ;)
    public Guid CreatedBy { get; set; }
}

public class User : UserCommon
{
    public Guid Uid { get; set; }
    public String Username { get; set; }
    public String Password { get; set; }
}

注意する必要があるのIdは、親ではなく子クラスにを含めることです。生成されるテーブルは次のとおりです。外部キーは自己参照です

生成されたテーブル

子のリストの取得は、特定の親GUIDのすべての子をフェッチする単純なLINQクエリと同じくらい簡単である必要があります。相続CreatedByのための財産でもあります。User

db.Select<User>(q => q.CreatedBy == '734FD814-024D-4795-AFD0-34FECF89A13A');
// Just a sample Guid, you should be able to select
// the Guid you need and insert it here.
于 2013-01-29T23:43:30.503 に答える
0

OrmLite のテーブルは、基礎となる db テーブルと厳密に1:1 のマッピングです。

これは、すべての複雑なタイプのプロパティが、プロパティ名を含む db テキスト フィールドにブロブされることを意味します。ここで期待するように、子リレーションへの自動マッピングには使用されません。

OrmLite を使用して多対多の関係をマッピングする方法を示す初期の回答を次に示します。

于 2012-11-17T17:11:04.410 に答える