我正在重新编写一个先前有代码的应用程序。根据需要,我将几个常用位移动到一个单独的项目中。其中一个是Linq to SQL Model。
我已解决所有引用并更正了所有命名空间,以便所有内容都能正确编译除了代码使用映射关联访问不同表的几个区域外。
例如,
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 Designer代码,我发现了问题:
[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已使用&#34; internal&#34;进行了修饰。如果我将其更改为&#34; public&#34;,则代码编译正常。但是,当然,对模型的任何更改都会再次破坏它,因为这是工具生成的代码。
当模型与调用它的代码位于同一个项目中时,这很有用,我已检查并仔细检查模型本身中的所有内容都设置为PUBLIC,但是代码生成器坚持做这个映射INTERNAL。
任何人都有想过为什么会这样工作,或者我如何欺骗代码生成器使其成为PUBLIC?
答案 0 :(得分:0)
回答了我自己的问题:
打开模型,然后点击有问题的关系箭头。在属性窗格中,展开&#34;子属性&#34;或者&#34;父母财产&#34;根据需要更改Access修饰符。