Entity Framework 4: CodeOnly e POCO
Fala galera, este post é resultado do meu estudo sobre as features do EFv4. A idéia deste post é mostrar o básico do CodeOnly e uso de POCOs no EF, este post foi baseado no exemplo feito pelo time do ADO.NET. Para rodar o código é necessário instalar o CTP2 que pode ser baixado aqui.
1-Inicialmente vamos criar uma solution vazia no visual studio.
2-Adicionar uma projeto(classLibrary) chamado Classes, neste projeto vamos colocar nossos POCOs
3- No projeto Classes adicionar uma classe chamada pessoa com o código abaixo
1: public class Person
2: {
3: public int PersonID { get; set; }
4: public String Name { get; set; }
5: public int Age { get; set; }
6: public String Email { get; set; }
7: }
4- Agora vamos criar um novo projeto(classLibrary) chamado Model, neste projeto vamos colocar as configurações do EF
5- Vamos adicionar nestr projeto referências para a dll Microsoft.Data.Entity.ctp e System.Data.Entity
6- Agora vamos adicionar uma classe chamada PersonConfiguration, esta classe será responsável pelo mapeamento do nosso POCO para o banco de dados.
1: public class PersonConfiguration : EntityConfiguration<Person>
2: {
3: public PersonConfiguration()
4: {
5: //Estamos indicando que PersoID é Identity
6: Property(p => p.PersonID).IsIdentity();
7:
8: //Estamos indicando que o nome é NOT NULL
9: Property(p => p.Name).IsRequired();
10: }
11: }
este arquivo vai existir para cada classe POCO do projeto.
7-Vamos criar uma classe chamada Model, esta classe será o nosso DataContext.
1: public class SimpleCodeOnlyExampleModel : ObjectContext
2: {
3: public SimpleCodeOnlyExampleModel(EntityConnection entityConnection)
4: : base(entityConnection)
5: {
6: DefaultContainerName = "SimpleCodeOnlyExampleModel";
7: }
8:
9: //IObject é uma interface que que possui os métodos necessários para o CRUD
10: public IObjectSet<Person> People
11: {
12: get { return base.CreateObjectSet<Person>(); }
13: }
14: }
8- Agora vamos criar uma factory para encapsular a criação do DataContext e tudo pronto
1: public class DataContext
2: {
3:
4: public static SimpleCodeOnlyExampleModel FactoryDataContext()
5: {
6: String connection = @"Data Source=.\SQLEXPRESS;Initial Catalog=SimpleCodeOnlyExampleModel;Integrated Security=SSPI;";
7: var builder = new ContextBuilder<SimpleCodeOnlyExampleModel>();
8:
9: //Adicionamos todas as configurações
10: builder.Configurations.Add(new PersonConfiguration());
11: return builder.Create(new SqlConnection(connection));
12: }
13:
14: /// <summary>
15: /// Este método cria o database de acordo com o mapeamento realizado nas classes
16: /// de configuração do POCO
17: /// </summary>
18: public static void CreateDataBase()
19: {
20: var ctx = FactoryDataContext();
21: if (!ctx.DatabaseExists())
22: ctx.CreateDatabase();
23: }
24: }
Tudo pronto! agora vamos ao nosso exemplo. Podemos criar um projeto chamado ConsoleApp(Console Application) para rodar nosso exemplo.
1: public static void Main()
2: {
3: //este método cria um database
4: DataContext.CreateDataBase();
5:
6: //Cadastradando uma pessoa
7: Person p = new Person();
8: p.Name = "Higor";
9: p.Age = 20;
10: p.Email = "higor.crr@gmail.com";
11: var ctx = DataContext.FactoryDataContext();
12:
13: ctx.People.AddObject(p);
14: ctx.SaveChanges();
15:
16: //lendo todas as pessoas
17: var people = ctx.People.ToList();
18:
19:
20: }
Após rodar o código podemos observar que um database foi criado no SQLServerExpress e que temos dados e tudo.
Estou achando o trabalho do pessoal muito bom, e vocês? vou abordar questões mais complexas nos próximos posts. Vou adiantar que o proximo assunto será lazyLoading e tipos de dados complexos.
fonte:http://higorcesar.com.br/Download/SimpleCodeOnlySample.rar