Arquivo

Arquivo da Categoria ‘POCO’

Entity Framework 4: auto relacionamento

10, fevereiro, 2010

Pessoal vamos ver como construir um auto relacionamento no Entity Framework 4 + POCOs.

1-Classes

   1: public class Category

   2: {

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

   4:     public String Name { get; set; }

   5:     public virtual Category Parent { get; set; }

   6:  

   7: }

Classe de categoria que possui uma auto-referencia

 

Pronto! todo o resto do código não é necessário.

2-Configuração

   1: public class CategoryConfiguration : EntityConfiguration<Category>

   2: {

   3:     public CategoryConfiguration()

   4:     {

   5:         Property(p => p.CategoryId).IsIdentity();

   6:     }

   7: }

 

3-DataContext

   1: public class DataContext

   2:     {

   3:  

   4:         public static Model FactoryDataContext()

   5:         {

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

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

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

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

  10:         }

  11:  

  12:         public static void CreateDataBase()

  13:         {

  14:  

  15:             var ctx = FactoryDataContext();

  16:             if (ctx.DatabaseExists())

  17:                 ctx.DeleteDatabase();

  18:             ctx.CreateDatabase();

  19:  

  20:         }

  21:  

  22:     }

 

4-Model

   1: public class Model : ObjectContext

   2: {

   3:     public Model(EntityConnection entityConnection)

   4:         : base(entityConnection)

   5:     {

   6:         DefaultContainerName = "Model";

   7:     }

   8:     public IObjectSet<Category> Categories

   9:     {

  10:         get { return base.CreateObjectSet<Category>(); }

  11:     }

  12: }

5-Exemplo

   1: class Program

   2:    {

   3:        static void Main(string[] args)

   4:        {

   5:            DataContext.CreateDataBase();

   6:            Category category1 = new Category();

   7:            category1.Parent = null;

   8:            category1.Name = "cat1";

   9:            category1.Parent = new Category() { Name = "Parent1" };

  10:  

  11:            Model model = DataContext.FactoryDataContext();

  12:            model.Categories.AddObject(category1);

  13:            model.SaveChanges();

  14:  

  15:            foreach (var category in model.Categories)

  16:            {

  17:                Console.WriteLine("Category Name:" + category.Name + "\n");

  18:                if (category.Parent != null)

  19:                    Console.WriteLine("Parent Name:" + category.Parent.Name + "\n");

  20:                else

  21:                    Console.WriteLine("Parent Name: --");

  22:  

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

  24:  

  25:  

  26:            }

  27:  

  28:            Console.ReadKey();

  29:        }

  30:  

  31:  

  32:    }

 

Codigo fonte

Author: higor.cesar Categories: Entity Framework, POCO Tags:

Entity Framework 4:Herança no modelo TPC

27, janeiro, 2010

 

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: