2016-06-10 107 views
0

我正在修改之前有代碼的應用程序。根據需要,我將幾個常用位移動到一個單獨的項目中。其中之一是Linq to SQL模型。Linq to SQL關聯表不可訪問

我已解決所有引用,並更正了所有命名空間,以便正確編譯所有內容,除了代碼使用映射關聯訪問不同表格的幾個區域之外。

因此,例如,

Template t = db.Templates.FirstOrDefault(f => f.TemplateId == templateId); 
    List<Item> templateList = new List<Item>(); 
    foreach (var r in globalItems) 
    { 
     if (t.TemplateChildren.FirstOrDefault(f => f.ItemId == r.ItemId) != null) 
      // do some stuff... 
    } 

在這種情況下,我無法訪問t..TemplateChildren。編譯器告訴我,由於其保護級別,無法訪問

考慮看看LINQ to SQL設計代碼,我發現了問題:

 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Template_TemplateChildren", Storage="_TemplateChildren", ThisKey="TemplateId", OtherKey="TemplateId")] 
    internal EntitySet<TemplateChildren> TemplateChildren 
    { 
     get 
     { 
      return this._TemplateChildren; 
     } 
     set 
     { 
      this._TemplateChildren.Assign(value); 
     } 
    } 

注意,EntitySet的裝飾有「內部」。如果我將其更改爲「公開」,則代碼編譯得很好。但是,當然,對模型的任何更改都會再次破壞它,因爲這是工具生成的代碼。

當模型與代碼調用它的代碼在同一個項目中時,這種方法有效,並且我已經檢查並重新檢查了模型中的所有內容都設置爲PUBLIC,但代碼生成器堅持使這個映射內部。

任何人都有想法,爲什麼這樣工作,或者我怎麼可以欺騙代碼生成器使其公開?

回答

0

回答我自己的問題:

打開模型並單擊,就會向是有問題的關係箭頭。在屬性窗格中,根據需要展開「子屬性」或「父屬性」並更改「訪問」修改器。