2012-11-17 57 views
1

我有一個鏈接表,並且一些鏈接將是子鏈接,引用父鏈接ID 但是我無法繞過服務棧ormlite和填充子項的屬性,將在獲得所有鏈接列表時的所有子鏈接。服務棧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; } 
} 

什麼想法?

回答

0

OrmLite中的表嚴格爲1:1映射與基礎數據庫表。

這意味着所有複雜類型的屬性都是blobbed到屬性名稱的數據庫文本字段中,它們從未用於自動映射到子關係,因爲您期望在此處執行此操作。

這裏有一個早期的答案,顯示你可以如何map many to many relations with OrmLite

+0

是有一個快速的方法,我可以做到這一點,例如,創建我的最終結果模型並具有再填充,因爲我需要它,上面的是現有項目的相當大一部分,它使用實體框架在這一刻,我試圖證明,ormlite將能夠處理這樣的事情,在項目中沒有太大的麻煩,不真正理解你發給我的鏈接真的,我不想插入,只是提供結果。謝謝 – davethecoder

+0

我沒有時間自己做這些,但是你可以做一個擴展方法,其行爲與你想要的相似,例如, 'model.Children ()'使用反射來查看src +子表並使用約定來構建相應的sql想要的。 – mythz

3

你可以用繼承來做到這一點。父類將包含對子類的引用。我不得不使用它來獲取哪個用戶創建了每個用戶。下面是一個示例:

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。將生成的表格如下。外鍵是一個自我參考

Generated Table

讓孩子們的名單應該是一個簡單的LINQ查詢,將獲取所有的孩子一定父GUID作爲容易。 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. 
+0

你爲什麼要帶去去年的一個帖子?甚至沒有給這個獎勵,不得不放棄或者使用其他東西來處理它,我不認爲我會重新開放一個完成的項目來重新做所有的工作,儘管說實話,好的解決方案只是羞辱它3個月後:-) – davethecoder

+4

嗯,我剛剛開始使用OrmLite,因爲您知道StackOverflow是一個社區。我的經驗可能對未來尋找相同事物的人有益。 –