2016-06-10 4 views
0

Ich überarbeite eine Anwendung, die zuvor funktionierenden Code hatte. Bei Bedarf verschiebe ich mehrere häufig verwendete Bits in ein separates Projekt. Einer davon ist ein Linq to SQL-Modell.Linq zu SQL Associated Tabelle nicht zugänglich

Ich habe alle Referenzen aufgelöst und alle Namespaces korrigiert, so dass alles korrekt kompiliert wird, außer für einige Bereiche, in denen der Code eine Zuordnungszuordnung verwendet, um auf eine andere Tabelle zuzugreifen.

So zum Beispiel,

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... 
    } 

In diesem Fall kann ich nicht t..TemplateChildren zugreifen. Der Compiler sagt mir, dass es aufgrund seines Schutzlevels nicht erreichbar ist.

einen Blick auf die Linq to SQL Designer Code machen, finde ich das Problem:

 [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); 
     } 
    } 

Beachten Sie, dass die EntitySet mit "internen" eingerichtet wurde. Wenn ich dies zu "public" ändere, kompiliert der Code gut. Aber natürlich ändert jede Änderung am Modell es wieder, weil das Werkzeug-generierter Code ist.

Dies funktionierte, wenn das Modell im selben Projekt wie der Code war, der es aufruft, und ich habe überprüft und doppelt überprüft, dass alles im Modell selbst auf PUBLIC gesetzt ist, aber der Code-Generator besteht darauf, diese Zuordnung zu machen INTERN.

Jeder hat Gedanken, warum das so funktioniert, oder wie ich den Code-Generator dazu bringen kann, es PUBLIC zu machen?

Antwort

0

beantwortet meine Frage:

Öffnen Sie das Modell aus und klicken Sie auf die Beziehung Pfeil, der problematisch ist zu sein. Erweitern Sie im Eigenschaftenbereich entweder "Child-Eigenschaft" oder "Parent-Eigenschaft" nach Bedarf, und ändern Sie den Zugriffsmodifizierer.