Página Inicial > .NET 4.0, Entity Framework, POCO > Entity Framework 4:Herança no modelo TPC

Entity Framework 4:Herança no modelo TPC

 

A versão 1.0 do Entity Framework já disponibilizava o recurso de herança entre entidades. Agora vamos ver como funciona a herança no Entity Framework 4 + POCOs.O exemplo aqui postado foi baseado neste post.

1-Entidades

vamos começar criando as entidades.

   1: public class Person

   2:     {

   3:         public virtual int PersonID { get; set; }

   4:         public virtual String Name { get; set; }

   5:         public virtual String Email { get; set; }

   6:     }

   1: public class AcademicPerson:Person

   2:    {

   3:        public virtual String Enrolment { get; set; }

   4:    }

 

2-Configurações

   1:  

   2:     public class PersonConfiguration : EntityConfiguration<Person>

   3:     {

   4:         public PersonConfiguration()

   5:         {

   6:             Property(p => p.PersonID).IsIdentity();

   7:             MapHierarchy(p => new

   8:             {

   9:                 p.PersonID,

  10:                 p.Name,

  11:                 p.Email,

  12:             }).ToTable("Person");

  13:         }

  14:     }

na configuração da classe base uso o método MapHierarchy para definir um novo tipo e apontar para tabela person

   1: public class AcademicPersonConfiguration : EntityConfiguration<AcademicPerson>

   2:   {

   3:       public AcademicPersonConfiguration()

   4:       {

   5:           MapHierarchy(ap => new

   6:           {

   7:               ap.PersonID,

   8:               ap.Enrolment

   9:           }).ToTable("AcademicPerson");

  10:  

  11:       }

  12:   }

Aqui é necessário mapear apenas a chave e os novos campos

 

Pronto! todo o código pra herança está ai. agora vamos continuar o exemplo para testar.

3-Modelo

   1: public class Model : ObjectContext

   2: {

   3:     public Model(EntityConnection entityConnection)

   4:         : base(entityConnection)

   5:     {

   6:         DefaultContainerName = "Model";

   7:     }

   8:     public IObjectSet<Person> People

   9:     {

  10:  

  11:         get { return base.CreateObjectSet<Person>(); }

  12:  

  13:     }

  14:  

  15: }

Caso você se pergunte onde está o IObjectSet de AcademicPerson vou lhe responder: Não podemos criar um Iobject set quando estamos trabalhando com classes derivadas. vamos obter as entidades derivadas usando o método OfType<T>().

 

4- DataContext

   1: public class DataContext

   2:    {

   3:  

   4:        public static Model FactoryDataContext()

   5:        {

   6:            String connection = @"Data Source=.\SQLEXPRESS;Initial Catalog=EF4Inheritance;Integrated Security=SSPI;";

   7:            var builder = new ContextBuilder<Model>();

   8:            builder.Configurations.Add(new PersonConfiguration());

   9:            builder.Configurations.Add(new AcademicPersonConfiguration());

  10:  

  11:            return builder.Create(new SqlConnection(connection));

  12:        }

  13:  

  14:        public static void CreateDataBase()

  15:        {

  16:  

  17:            var ctx = FactoryDataContext();

  18:            if (ctx.DatabaseExists())

  19:                ctx.DeleteDatabase();

  20:            ctx.CreateDatabase();

  21:  

  22:        }

  23:  

  24:    }

 

5- Exemplo

   1: class Program

   2:    {

   3:        static void Main(string[] args)

   4:        {

   5:            DataLayer.DataContext.CreateDataBase();

   6:            var dbContext = DataContext.FactoryDataContext();

   7:            

   8:            //Criando uma entidade do tipo Person

   9:            var person1 = dbContext.CreateObject<Person>();

  10:            person1.Email = "higor@mail.com";

  11:            person1.Name = "higor";

  12:            dbContext.People.AddObject(person1);

  13:            dbContext.SaveChanges();

  14:  

  15:            // Criando uma entidade do tipo AcademicPerson

  16:            var academicperson1 = dbContext.CreateObject<AcademicPerson>();

  17:            academicperson1.Email = "carlos@mail.com";

  18:            academicperson1.Name = "carlos";

  19:            academicperson1.Enrolment = "123";

  20:            dbContext.People.AddObject(academicperson1);

  21:            dbContext.SaveChanges();

  22:  

  23:            //Exibindo todas as ~entidades do tipo Person

  24:            Console.WriteLine("People\n");

  25:            foreach (var person in dbContext.People)

  26:                Console.WriteLine("Name: " + person.Name + " Email:" + person.Email);

  27:            

  28:            Console.WriteLine("\n");

  29:            //Exibindo todas as en

  30:            Console.WriteLine("AcademicPeople\n");

  31:            foreach (var academicPerson in dbContext.People.OfType<AcademicPerson>())

  32:                Console.WriteLine("Name: " + academicPerson.Name + " Email:" + academicPerson.Email + " Enrolment" + academicPerson.Enrolment);

  33:  

  34:            Console.ReadKey();

  35:        }

  36:    }

 

fonte:

http://www.dotway.se/post/CodeOnly-Inheritance-e28093-TPH-and-MEF.aspx

Author: higor.cesar Categories: .NET 4.0, Entity Framework, POCO Tags:
  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.