2012-03-01 4 views

Odpowiedz

1

To bardzo przypomina anwer, który mam na similar question. Ale w twoim przypadku chcesz dostosować modyfikator dostępu do klas, a nie ObjectContext.

adaptowany po odebraniu HVD za:

Projektant ma opcję "Add Item Code Generation". Jeśli skorzystasz z tego, otrzymasz kilka opcji. Używam "Self-Tracking Entity Generator" ADO.NET, ale w ten sam sposób działa dla nich wszystkich. Wybranie tej opcji dodaje do projektu dwa pliki szablonów (Model.tt i Model.Context.tt), które można dowolnie modyfikować według własnego uznania. Dla modyfikacji jesteś pytając o, znajdziesz generowanie kodu dla swoich klas jednostki na lub w pobliżu linii 37. Zmian

< # = Accessibility.ForType (podmiot) #> < # = code.SpaceAfter (code.AbstractOption (podmiot)) #> partial class ...

do

częściowe klasa ...

Dla typu złożonego istnieje podobna linia poniżej: również wymaż część przed "częściową".

Spowoduje to ustawienie modyfikatorów dostępu dla wszystkich typów jednocześnie, włącznie z przyszłymi typami. W celu dostosowania poszczególnych typów lepiej korzystaj z przeglądarki modelu.

Będziesz musiał ustawić właściwość "Entity Container Access" samego modelu na wewnętrzną, w przeciwnym razie zostaną wygenerowane członkowie z niezgodnymi modyfikatorami dostępu.

3

pewno, w oknie Przeglądarka Model Wybierz> EntityTypes

Model Browser

i od typu ustawionego w oknie Właściwości dostępu modyfikatora. Powinieneś również zmodyfikować w EntityContainer> EntitySetter modyfikator zestawu, tak jakby typ był wewnętrzny, zestaw powinien być przynajmniej wewnętrznie (domyślnie publiczny).

Opcjonalnie można użyć szablonu T4, w którym można bezpośrednio zmodyfikować generowany dostęp.

+0

Zdaję sobie sprawę z okna Właściwości, ale nie pozwala mi to na wybór wielu jednostek i jednoczesne ustawienie ich modyfikatora dostępu. Muszę to zrobić jeden po drugim. Chyba muszę spojrzeć na szablony T4. –

+2

Otwórz plik EDMX za pomocą edytora XML (jest to zwykły plik XML) i dokonaj wymiany wsadu tam. Zrobione w 20 sekund. –

+0

Tak, wybierałem bardziej trwałe rozwiązanie (gdzie modyfikatory nie zostałyby zastąpione przez regenerację kodu), ale to też jest w porządku. –

0

Chciałem, aby mój kontener jednostki, jak również wygenerowane klasy złożone były wewnętrzne. Najpierw ustawiam "Entity Container Access" na wewnętrzny. Następnie dodałem zmienną kontenera do górnej części pliku "Model.tt" po inicjalizacji zmiennej itemCollection. Znalazłem kod zmiennej kontenera w pliku "Model.Context.tt".

var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); 
    var container = itemCollection.OfType<EntityContainer>().FirstOrDefault(); 

Następny Zmieniłem

<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> 

do

<#=Accessibility.ForType(container)#> partial class <#=code.Escape(complex)#> 

Wybrałem zmodyfikować kod w ten sposób, że mogę trzymać moje złożonych modyfikatorów dostępu klasa pojemnik w synchronizacji z pojemnikiem modyfikator dostępu.

Dziękuję Gert Arnold za poprowadzenie mnie we właściwym kierunku.

Powiązane problemy