Standardregeln für die Codegenerierung von SPMetal

Letzte Änderung: Montag, 28. März 2011

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Die Website darstellende Klasse
Listen darstellende Eigenschaften
Inhaltstypen darstellende Klassen
Listenspalten darstellende Eigenschaften
Enumerationen und Klassen, die Optionen für ein Auswahlfeld oder ein Feld mit Mehrfachauswahl darstellen
EntityRef<T>-, EntitySet<T>- und LookupList<T>-Felder, die Nachschlagelistenbeziehungen darstellen

In diesem Thema sind die Standardregeln angegeben, die SPMetal beim Generieren von Code befolgt. Sie können einen Teil dieses Verhaltens ändern, indem Sie eine SPMetal-Parameterdatei erstellen und eine /parameters-Option zur SPMetal-Befehlszeile hinzufügen. Weitere Informationen zu dieser Art von Anpassung finden Sie unter Außerkraftsetzen von SPMetal-Standardeinstellungen mit einer Parameter-XML-Datei und SPMetal.

Regeln, die in den nachfolgenden Abschnitten mit einem Sternchen gekennzeichnet sind, können nicht überschrieben werden.

Auf jede Regel, die überschrieben werden kann, folgt die Angabe des XML-Markups, mit dem sie überschrieben wird.

Die Website darstellende Klasse

  • *Eine Klasse, die von der DataContext-Klasse erbt, wird generiert, um die Websitedaten als Ganzes darzustellen.

  • *Die Klasse ist als partial gekennzeichnet (Partial in Microsoft Visual Basic).

  • Die Klasse ist als public gekennzeichnet (Public in Visual Basic). (Kann mit dem AccessModifier-Attribut des <Web>-Elements überschrieben werden.)

  • Die Klasse hat den Namen DateinameDataContext, wobei Dateiname der Name der Datei ist (ohne die Dateinamenerweiterung), die durch die /code-Option in der SPMetal-Befehlszeile angegeben ist. Wenn z. B. /code:Personnel.vb in der Befehlszeile steht, wird die Klasse PersonnelDataContext genannt. (Kann mit dem Class-Attribut des <Web>-Elements überschrieben werden.)

Listen darstellende Eigenschaften

  • Für jede nicht ausgeblendete Liste auf der Website wird eine Eigenschaft generiert (in der von DataContext abgeleiteten Klasse). (Kann mit dem <ExcludeList>- oder <ExcludeOtherLists>-Element überschrieben werden.)

  • *Der Typ der Eigenschaft ist EntityList<TEntity>.

  • *Die Eigenschaft ist als public gekennzeichnet (Public in Visual Basic).

  • Für ausgeblendete Listen wird keine Eigenschaft generiert. (Kann mit einem <IncludeHiddenLists>-Element oder einem <List>-Element, dessen Name-Attribut einer ausgeblendeten Liste zugewiesen ist, überschrieben werden.)

  • Eine Eigenschaft, die eine Liste darstellt, besitzt denselben Namen wie die Liste. Dabei gelten die folgenden Ausnahmen.

    • Falls Leerzeichen im Listennamen vorhanden sind, werden diese aus dem Eigenschaftsnamen entfernt.

    • Falls der erste Buchstabe des Listennamens ein Kleinbuchstabe ist, wird er in dem Eigenschaftsnamen groß geschrieben.

    Listenname

    Eigenschaftsname

    Ankündigungen

    Announcements

    Teammitglieder

    TeamMembers

    Linsen

    Lentils

    (Kann mit dem Member-Attribut des <List>-Elements überschrieben werden.)

  • TEntity, der Typparameter der EntityList<TEntity>-Eigenschaft, gibt die für die Liste generierte Inhaltstypklasse an. Siehe Inhaltstypen darstellende Klassen nachfolgend in diesem Thema. Wenn der Liste mehr als ein Inhaltstyp zugeordnet ist, ist TEntity im Allgemeinen der gemeinsame Nenner. Oft wird für die Klasse als gemeinsamer Nenner einfach der Standard-Elementinhaltstyp von Microsoft SharePoint Foundation verwendet. (Kann mit dem Type-Attribut des <List>-Elements überschrieben werden.)

    Wichtiger HinweisWichtig

    Es gibt eine Ausnahme zur allgemeinen Regel, dass ein gemeinsamer Nenner als Inhaltstyp verwendet wird, wenn die Liste mehr als einen Inhaltstyp enthält. In SharePoint Foundation wird allen Listen ein Standard-Ordnerinhaltstyp hinzugefügt (zusätzlich zum Standard-Elementinhaltstyp). Standardmäßig zählt SPMetal jedoch den Ordnerinhaltstyp nicht mit, wenn bestimmt wird, ob die Liste mehr als einen Inhaltstyp enthält. Wenn der Ordnerinhaltstyp der einzige zusätzliche Inhaltstyp ist, gibt deshalb TEntity der EntityList<TEntity>-Eigenschaft den vollständigen spezifischen Inhaltstyp für die Liste an, z. B. Ankündigungen für die Liste Ankündigungen und Kalenderereignis für die Liste Kalender. Dieses Standardverhalten kann überschrieben werden.

Inhaltstypen darstellende Klassen

  • Eine Inhaltstypklasse wird zum Darstellen des Standard-Elementinhaltstyps in SharePoint Foundation generiert. (Kann mit einem <ExcludeContentType>-Element für den Inhaltstyp und für jede Inhaltstypklasse, die von ihm erbt, überschrieben werden.)

  • Für jede beliebige Liste (die nicht aus der Codegenerierung ausgeschlossen wurde) wird eine Inhaltstypklasse für jeden definierten Inhaltstyp generiert, der der Liste zugeordnet ist. (Kann mit dem <ExcludeContentType>- oder <ExcludeOtherContentTypes>-Element überschrieben werden.)

  • Für jeden definierten Inhaltstyp einschließlich des Standard-Elementinhaltstyps besitzt die generierte Klasse denselben Namen wie der Inhaltstyp. (Kann mit dem Class-Attribut eines <ContentType>-Elements überschrieben werden.)

  • *Für jede Liste, die keinen definierten Inhaltstyp verwendet (und die nicht aus der Codegenerierung ausgeschlossen wurde), der jedoch mindestens eine Spalte hinzugefügt wurde, wird eine Klasse generiert, um den implizierten Inhaltstyp darzustellen.

  • Die Klasse, die einen implizierten Inhaltstyp darstellt, erhält den Namen VerarbeiteterListennameStandardinhaltstyp, wobei VerarbeiteterListenname derselbe Name ist, der für die die Liste darstellende Eigenschaft generiert wurde (siehe Listen darstellende Eigenschaften weiter oben in diesem Thema). Standardinhaltstyp ist der Name des definierten Inhaltstyps, von dem der implizierte Inhaltstyp abgeleitet wurde. Hierbei handelt es sich in der Regel um Element, in einigen Fällen kann es jedoch auch der Name eines anderen definierten Inhaltstyps sein. Wenn der definierte Inhaltstyp Problem beispielsweise einer Liste mit dem Namen Aufgaben hinzugefügt wird und dann eine Spalte aus diesem Inhaltstyp aus der Liste entfernt wird, wird die Klasse, die diesen neuen implizierten Inhaltstyp darstellt, AufgabenProblem genannt (Kann mit dem Class-Attribut eines <ContentType>-Elements überschrieben werden.)

    Wichtiger HinweisWichtig

    Der implizierte Inhaltstyp hat noch keinen Namen, wenn die Datei parameter.xml gelesen wird, daher können Sie nicht ProcessedListNameBaseContentType als Wert eines Attributs eines Elements in der Datei parameters.xml verwenden. Sie können beispielsweise nicht SPMetal verwenden, um die EntityList<TEntity><T>-Eigenschaft zu definieren, die eine Liste Team Members als EntityList<TeamMembersItem> darstellt, wobei TeamMembersList der implizierte Inhaltstyp der Liste ist, indem Sie ein <List>-Element für die Liste erstellen und seinen Type-Parameter auf TeamMembersItem festlegen. Dadurch würde von SPMetal ein Fehler ausgegeben, da der Name TeamMembersItem zu dem Zeitpunkt, zu dem die Datei parameters.xml gelesen wird, noch nicht generiert wurde. Wenn Sie die Mitglieder einer Liste als Objekte vom implizierten Typ behandeln müssen, können Sie die Cast<TResult>(IQueryable)-Methode im Aufruf von GetList<T>(String) verwenden und einen anonymen Typ zurückgeben lassen. Ein Beispiel: var teamMembers = teamWebSite.GetList<Item>("TeamMembers").Cast<TeamMembersItem>();.

  • *Falls ein Inhaltstyp von einem anderen Inhaltstyp erbt, erbt die generierte Klasse, die den ersten Inhaltstyp darstellt, von der Klasse, die den zweiten Inhaltstyp darstellt.

  • *Die Inhaltstypklassen sind als partial gekennzeichnet (Partial in Visual Basic).

  • Die Inhaltstypklassen sind als public gekennzeichnet (Public in Visual Basic). (Kann mit dem AccessModifier-Attribut eines <ContentType>-Elements überschrieben werden.)

  • Für ausgeblendete Inhaltstypen wird keine Klasse generiert. (Kann mit einem <IncludeHiddenContentTypes>-Element oder einem <ContentType>-Element, dessen Name-Attribut einem ausgeblendeten Inhaltstyp zugewiesen ist, überschrieben werden.)

  • *Die Klasse, die den Standard-Elementinhaltstyp darstellt, implementiert ITrackEntityState, ITrackOriginalValues, INotifyPropertyChanged und INotifyPropertyChanging.

Listenspalten darstellende Eigenschaften

  • Für jedes nicht ausgeblendete Feld (Spalte) im Inhaltstyp wird eine Eigenschaft generiert (in einer Inhaltstypklasse). (Kann mit dem <ExcludeColumn>- oder <ExcludeOtherColumns>-Element überschrieben werden.)

  • *Die Eigenschaft ist als public gekennzeichnet (Public in Visual Basic).

  • Die Eigenschaft hat denselben Namen wie die Spalte, die sie darstellt. (Kann mit dem Member-Attribut eines <Column>-Elements überschrieben werden.)

  • *Leerzeichen in einem Spaltennamen werden entfernt.

  • *Falls das erste Wort im Spaltennamen mit einem Kleinbuchstaben beginnt, wird im Eigenschaftsname ein Großbuchstabe verwendet.

  • Der Typ der Spalteneigenschaft wird aus der Eigenschaft des Felds in Übereinstimmung mit der in Typzuordnung: Von LINQ to SharePoint-Anbieter zu .NET angegebenen Zuordnung bestimmt. (Kann mit dem Type-Attribut eines <Column>-Elements überschrieben werden.)

  • Für Spalten, die sich in der Liste befinden, nicht jedoch im Inhaltstyp, wird keine Eigenschaft generiert. (Kann mit dem Name-Attribut eines <Column>-Elements überschrieben werden.)

  • Für ausgeblendete Spalten wird keine Eigenschaft generiert, mit Ausnahme der verborgenen Spalten ID und Version. (Kann mit dem <IncludeHiddenColumns>-Element überschrieben werden.)

Enumerationen und Klassen, die Optionen für ein Auswahlfeld oder ein Feld mit Mehrfachauswahl darstellen

  • Für jedes Auswahlfeld, das Ausfüllen nicht zulässt, wird eine aufgelistete Klasse generiert. (Kann mit dem Type-Attribut eines <Column>-Elements überschrieben werden.)

  • Für jedes Feld mit Mehrfachauswahl, das das Auffüllen nicht zulässt und weniger als 31 Optionen enthält, wird eine aufgelistete Klasse dekoriert mit dem [Flags]-Attribut generiert. (Kann mit dem Type-Attribut eines <Column>-Elements überschrieben werden.)

  • *Ungültig und Keine werden als mögliche Werte den Enumerationen in beiden hinzugefügt.

  • *Für jedes Auswahlfeld und Feld mit Mehrfachauswahl, das das Auffüllen zulässt, wird eine geschützte Klasse mit einer String-Konstanten für jeden definierten Wert generiert.

EntityRef<T>-, EntitySet<T>- und LookupList<T>-Felder, die Nachschlagelistenbeziehungen darstellen

  • *Für jede Spalte, die das Ergebnis des Nachschlagens in einem Feld einer anderen Liste enthält und mehrere Werte nicht zulässt, bindet die Eigenschaft, die die Spalte darstellt, ein privates Feld vom Typ EntityRef<TEntity> ein, wobei TEntity der Inhaltstyp der Nachschlageliste ist.

  • *Für jede Spalte, die das Ergebnis des Nachschlagens in einem Feld einer anderen Liste enthält und mehrere Werte zulässt sowie in einer Liste nachschlägt, die durch von SPMetal generierten Code dargestellt ist, bindet die Eigenschaft, die die Spalte darstellt, ein privates Feld vom Typ EntitySet<TEntity> ein, wobei TEntity der Inhaltstyp der Nachschlageliste ist.

  • *Für jede Spalte, die das Ergebnis des Nachschlagens in einem Feld einer anderen Liste enthält und mehrere Werte zulässt sowie in einer Liste nachschlägt, die nicht von durch SPMetal generierten Code dargestellt ist, beispielsweise eine Zielliste, die ausgeblendet ist oder aus der Codegenerierung durch die Konfigurationsdatei von SPMetal ausgeschlossen ist, werden zwei private LookupList<T>-Felder generiert. Eins dieser Felder enthält die aktuellen Werte des Nachschlagefelds (die eine Untergruppe der Zielspalte sind), das andere enthält die IDs der Listenelemente, aus denen die aktuellen Werte entnommen werden. Diese beiden privaten Felder sind jeweils in eine öffentliche Eigenschaft vom Typ IList<T> eingebunden.

Siehe auch

Referenz

SPMetal

Microsoft.SharePoint.Linq.CodeGeneration

EntityList<TEntity>

EntityRef<TEntity>

EntitySet<TEntity>

LookupList<T>

Konzepte

Typzuordnung: Von LINQ to SharePoint-Anbieter zu .NET

Außerkraftsetzen von SPMetal-Standardeinstellungen mit einer Parameter-XML-Datei