Wie kann man allen Entitäten den Zugriff ermöglichen: intern statt öffentlich in EDMX?

9

Ich möchte, dass mein Entity Framework-Modell Entitäten mit Zugriffsmodifizierer internal statt public generiert. Ich benutze das EF-Modell in einer Bibliothek und möchte nur eine einzige Klasse (irgendeinen Controller) von außen zugänglich machen.

Gibt es eine einfache Möglichkeit, die EF-Modellgenerierung internal modifier anstelle von public zu verwenden, einschließlich der Modellregenerierung beim Aktualisieren?

    
Kornelije Petak 01.03.2012, 09:47
quelle

3 Antworten

1

Es ist sehr ähnlich wie die Antwort, die ich auf eine ähnliche Frage bekam . In Ihrem Fall möchten Sie jedoch den Zugriffsmodifizierer der Klassen und nicht den ObjectContext anpassen.

Angepasst nach der Antwort von hvd:

Der Designer verfügt über eine Option "Codegenerierungselement hinzufügen". Wenn Sie dies verwenden, erhalten Sie mehrere Optionen. Ich verwende "ADO.NET Self-Tracking Entity Generator", aber der gleiche Weg funktioniert für alle von ihnen. Wenn Sie dies auswählen, werden Ihrem Projekt zwei Vorlagendateien (Model.tt und Model.Context.tt) hinzugefügt, die Sie nach Belieben ändern können. Für die Änderung, nach der Sie fragen, finden Sie eine Codegenerierung für Ihre Entitätsklassen bei oder in der Nähe von Zeile 37. Ändern Sie

  

& lt; # = Accessibility.ForType (Entität) # & gt; & lt; # = code.SpaceAfter (code.AbstractOption (entity)) # & gt; partielle Klasse ...

bis

  

Teilklasse ...

Für komplexe Typen gibt es eine ähnliche Zeile weiter unten: Löschen Sie auch den Teil vor "partiell".

Damit werden die Zugriffsmodifikatoren für alle Typen auf einmal festgelegt, einschließlich der zukünftigen Typen. Zum Anpassen einzelner Typen verwenden Sie besser den Modellbrowser.

Sie müssen die Eigenschaft "Entity Container Access" des Modells selbst auch auf intern setzen, andernfalls werden Member mit inkompatiblen Zugriffsmodifikatoren generiert.

    
Gert Arnold 01.03.2012, 11:38
quelle
3

Sicher, im Model Browser Fenster wählen Sie & gt; EntityTypes

und auf Ihrem Typ im Eigenschaftenfenster Zugriffsmodifikator gesetzt. Sie sollten auch in EntityContainer & gt; EntitySet den Modifikator für set, als ob der Typ intern ist, der Satz sollte auch mindestens intern sein (standardmäßig public).

Optisch können Sie die T4-Vorlage verwenden, in der Sie den zu generierenden Zugriff direkt ändern können.

    
cincura.net 01.03.2012 11:44
quelle
0

Ich wollte, dass mein Entitätscontainer und die generierten komplexen Klassen intern sind. Zuerst habe ich den "Entity Container Access" auf intern gesetzt. Als Nächstes habe ich nach der Initialisierung der itemCollection-Variable eine Containervariable an den Anfang der Datei "Model.tt" hinzugefügt. Ich habe den Variablencode des Containers in der Datei "Model.Context.tt" gefunden.

%Vor%

Als nächstes habe ich

geändert %Vor%

bis

%Vor%

Ich entschied mich, den Code auf diese Weise zu ändern, damit ich meine komplexen Klassencontainer-Zugriffsmodifizierer mit dem Containerzugriffsmodifikator synchron halten konnte.

Danke Gert Arnold , dass er mich in die richtige Richtung geführt hat.

    
Earl 15.05.2017 16:24
quelle