2013-07-26 55 views
0

我打算使用一個更輕量級的ORM工具(對於我的項目而言,主要是因爲性能和內存使用情況而使用EF)。 我正在考慮使用ORMLite,它似乎是非常整潔的ORM包。.NET ORMLite和Eager正在加載

我唯一無法弄清楚如何解決方法渴望加載相關型號。

public class Account 
{ 
    public string Id { get; set; } 
    public string CreatedById { get; set; } 

    public User CreatedBy { get; set; } 
} 

使用上面的類我喜歡能夠加載相關「CreatedBy」字段上的一些字段。

SELECT Id, CreatedById, CreatedBy.Name FROM Account 

預先加載的引用是非常重要的,因爲一個數據庫查詢可以裝載數百記錄的,但我將能夠顯示誰在網格創建記錄。

我該如何做到這一點?

回答

0

輕量級orms不包含EF或nHibernate中可用的功能,但速度很快,但您必須編寫更多代碼。 ormlite中不存在急切的加載。
但是讓我們從起點開始:)你的帳戶類應該看起來像如下:

public class Account 
{ 
    public string Id { get; set; } 
    public string CreatedById { get; set; } 

    [References(typeof(User))] 
    public int CreatedBy { get; set; } 
} 
public class User 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

你不能有用戶類型的屬性CreatedBy - 服務棧ormlite不支持這一點。你的類必須看起來像你的表,並在表中有int列的名稱CreatedBy;) 在這裏,你可以閱讀如何使從ormlite加入JoinSqlBuilder

+0

考慮到我學會了如何使用JoinSqlBuilder選定的列如果我沒有「CreatedBy」屬性,將會填充? - 其次是有沒有辦法進一步定製ORMLite以支持基本的Eager加載? – sam360

+0

關於JoinSqlBuilder,您可以創建新類型(是的,我知道這很愚蠢),或者您可以使用[Ignore]屬性添加一個類型爲User到Account類的更多屬性,然後完成此屬性。在我看來,要創建精彩的Eager Loading,您必須更改ormlite源代碼才能添加此功能。 –

+0

爲了確保沒有其他人誤解您的答案,讓我們刪除您添加的INT屬性,外鍵是「CreatedById」。 我很感謝您的迴應。 – sam360