2013-02-04 28 views
0

我有一種情況,我希望加載正在從數據庫中使用LINQ-to-SQL檢索的用戶的組織屬性(因爲我的using這裏試圖獲取該屬性後來因爲上下文的連接關閉而失敗)。問題是有時用戶沒有組織。在這種情況下,FetchUserByName返回null。不是我想要的。有沒有辦法讓我的工作方式符合我的要求,即返回一個用戶實例,無論他們是否擁有關聯的組織?DataLoadOptions LoadWith當關係爲空時阻止對象加載

private static void EagerLoad(DataContext ctx) 
    { 
     var loadOpt = new DataLoadOptions(); 
     loadOpt.LoadWith<User>(u => u.Organization); 
     ctx.LoadOptions = loadOpt; 
    } 

    public User FetchUserByName(string username) 
    { 
     User user = null; 
     using (var ctx = contextManager.GetSingleDataContext()) 
     { 
      EagerLoad(ctx); 
      user = ctx.GetTable<User>().SingleOrDefault(u => u.UserName == username && u.IsActive); 
     } 

     return user; 
    } 
+1

SO上有幾個線程描述了'LoadWith'如何創建'INNER JOIN',這是造成這個問題的原因。有一些解決方法,如此處所述; http://stackoverflow.com/questions/7639417/entity-framework-and-forced-inner-join –

+0

@RJLohan其實,'LoadWith'創建'INNER JOIN'和'OUTER LEFT JOIN'。但是你的鏈接問題幫助我找到了一些問題,謝謝。 – mlibby

回答

1

記錄該修補程序適用於其他可能遇到此問題的人。

LoadWith實際上決定是否通過查看數據模型類的外鍵是在數據庫中爲空的使用由LINQ到SQL創建的SQL的INNER JOINOUTER LEFT JOIN。如果它可以爲空,則使用外連接。

[Column] 
    public int OrganizationId { get; set; } /*** Here is The Problem ***/ 

    private EntityRef<Organization> _organization; 

    [Association(OtherKey = "OrganizationId", Storage = "_organization", ThisKey = "OrganizationId", IsForeignKey = true)] 
    public Organization Organization 
    { 
     get 
     { 
      return this._organization.Entity; 
     } 
    } 

改變了一行:

public? int OrganizationId { get; set; } 

然後一切都按預期。

相關問題