2016-06-10 68 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

回答我自己的问题:

打开模型并单击,就会向是有问题的关系箭头。在属性窗格中,根据需要展开“子属性”或“父属性”并更改“访问”修改器。