Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 3
  • 89

Odpowiedzi (2)

  • 3

Entity Framework przechowuje wewnętrznie informacje o modelu w tzw. Workspace. Klasa ObjectContext posiada właściwość MetadataWorkspace, która umożliwia pobranie wszystkich potrzebnych informacji. 

Niestety klasa DbContext, która jest podstawą podejścia Code First, nie posiada już tej właściwości. 

Ale zarówno ObjectContext, jak i DbContext implementują interfejs IObjectContextAdapter. Musimy odpowiednio zrzutować DbContext na ObjectContext i dzięki temu uzyskamy dostęp do wszystkich właściwości ObjectContext:

 

 
    public static class DbContextExtensions    {

  public static MetadataWorkspace MetadataWorkspace(this DbContext context)
        {
            ObjectContext objectContext = 
                (context as IObjectContextAdapter).ObjectContext;

            return objectContext.MetadataWorkspace;
} 
        }

 


Proszę zauważyć, że skorzystaliśmy tutaj z mechanizmu metod rozszerzających (Extension Methods).

W następnym kroku możemy pobrać informacje o encjach:

 

 

        public static IEnumerable<EntityType> GetEntities(this DbContext context)
        {
            var entities = context.MetadataWorkspace()
                .GetItemCollection(DataSpace.OSpace)
                .GetItems<EntityType>()
                .ToList();

            return entities;
        }

 

 


Teraz możemy skorzystać z tych metod. Tutaj przykład wygenerowania dokumentacji na konsolę:

 

 

using(var context = new DASContext())
            {
                var entities = context.GetEntities();

                entities
                    .ToList()
                    .ForEach(x =>
                    {
                        System.Console.WriteLine("{0}", x.Name);

                        
                        x.Properties
                            .ToList()
                            .ForEach(
                            p => System.Console.WriteLine("{0} - {1}", p.Name, p.TypeName));
                       
                        System.Console.WriteLine("klucze:");

                        x.KeyProperties
                            .ToList()
                            .ForEach(k => System.Console.WriteLine(k.Name));

                    });

 

 



Oczywiście, zależnie od potrzeb możemy wygenerować dokument w PDF lub FlowDocument WPF.

 

 

 

 

  • Odpowiedział
  • @ | 02.06.2014
  • TRENER ALTKOM AKADEMII
Komentarze
  • 1
  • Odpowiedział
  • @ | 30.07.2014
  • TRENER ALTKOM AKADEMII