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,但代碼生成器堅持使這個映射內部。
任何人都有想法,爲什麼這樣工作,或者我怎麼可以欺騙代碼生成器使其公開?