Usuário com melhor resposta
Entity Framework e DBSet

Pergunta
-
Olá, lendo uns post do Fernando H. que sempre está por aqui, surgiu uma dúvida sobre a forma que eu chamo meus DBSet, e se da forma que eu estou fazendo, não vai deixar a aplicação lenta no futuro.
Todo controle que eu crio, eu faço:
public class UsuarioController : Controller { private ERPContext db = new ERPContext(); .... public ActionResult Cadastrar(UsuarioCadastro model) { ... db.Usuario.Add(model); db.SaveChanges(); } }
Meu dbset é assim:
public class ERPContext : DbContext { public DbSet<Empresa> Empresa { get; set; } public DbSet<Pessoa> Pessoa { get; set; } public DbSet<Usuario> Usuario { get; set; } public DbSet<Sexo> Sexo { get; set; } public DbSet<TipoPessoa> TipoPessoa { get; set; } public ERPContext() : base("ConexaoERP") { Database.SetInitializer<ERPContext>(null); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { var _DBOwner = "dbo"; modelBuilder.Entity<Empresa>().ToTable("Empresa", schemaName: _DBOwner); modelBuilder.Entity<Pessoa>().ToTable("Pessoa", schemaName: _DBOwner); modelBuilder.Entity<Usuario>().ToTable("Usuario", schemaName: _DBOwner); modelBuilder.Entity<Sexo>().ToTable("Sexo", schemaName: _DBOwner); modelBuilder.Entity<TipoPessoa>().ToTable("TipoPessoa", schemaName: _DBOwner); } }
Estou perguntando isto, pois todos os exemplos que eu vejo de NHibernate, tem que controlar session, fazer um monte de coisa, e pelo Entity Framework com DBSet é muito simples...
Ou é assim mesmo, ou eu estou fazendo algo de errado... :)
O post do Fernando que originou a dúvida é este: http://ferhenriquef.com/2013/03/28/construindo-camadas-de-acesso-a-dados-parte-iii-repositrios-genricos-pantheon/#more-1284
Marlon Tiedt
www.sesmt.com.br
Respostas
-
Olá,
Está correto, tanto que os templates T4 da própria Microsoft criam os CRUDS assim.
- Marcado como Resposta Marlon Tiedt sexta-feira, 12 de abril de 2013 13:11
-
Olá Marlon,
Funciona assim mesmo.
O EF tem a capacidade de perceber quando vc esta executando uma operação sobre o banco realmente ou não.
Meu único comentário é o fato de vc referenciar o EF uma única fez na página. Sempre que realizo uma operação costumo fazer o Dispose da instância do contexto fo EF.
[]s!
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Visual C#
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil
- Editado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator quarta-feira, 10 de abril de 2013 16:07
- Marcado como Resposta Marlon Tiedt sexta-feira, 12 de abril de 2013 13:11
Todas as Respostas
-
Olá,
Está correto, tanto que os templates T4 da própria Microsoft criam os CRUDS assim.
- Marcado como Resposta Marlon Tiedt sexta-feira, 12 de abril de 2013 13:11
-
Olá Marlon,
Funciona assim mesmo.
O EF tem a capacidade de perceber quando vc esta executando uma operação sobre o banco realmente ou não.
Meu único comentário é o fato de vc referenciar o EF uma única fez na página. Sempre que realizo uma operação costumo fazer o Dispose da instância do contexto fo EF.
[]s!
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Visual C#
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil
- Editado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator quarta-feira, 10 de abril de 2013 16:07
- Marcado como Resposta Marlon Tiedt sexta-feira, 12 de abril de 2013 13:11
-
-
Marlon,
Tudo beleza?
Segue o exemplo:
public class UsuarioController : Controller public ActionResult Cadastrar(UsuarioCadastro model) { using (var db = new ERPContext()) { db.Usuario.Add(model); db.SaveChanges(); } } }
[]s!
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Visual C#
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil