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,但代码生成器坚持使这个映射内部。
任何人都有想法,为什么这样工作,或者我怎么可以欺骗代码生成器使其公开?