Usuário com melhor resposta
insert EF N:N vb.net

Pergunta
-
Pessoal,
Desde ja agradeço a ajuda dos amigos.
Tenho uma Tabela Chamada Disciplinas(Todas pré Cadastradas) e um Tabela Cursos. No momento da Inclusão do curso eu preciso Informar as Disciplinas que compoem esse curso. as Disciplinas São escolhidas em um dataGrig com checkbox.
A Pergunta é: Como Faço na inclus"ao do novo curso para dizer que as disciplinas x e y fazem parte do curso x.
Try Dim Novo As New Cursos() Novo.Id = 1 Novo.NomeCurso = frmCursos.txtNomeCruso.Text Novo.CargaHoraria = frmCursos.txtCargaHoraria.Text Novo.DescricaoCurso = frmCursos.txtDescricaoCurso.Text Novo.LotacaoMaxima = frmCursos.txtLMaxima.Text Novo.LotacaoMinima = frmCursos.txtLminima.Text Novo.DataAlteracao = Now.Date Novo.Excluido = "N" Novo.UsuarioID = BLLUsuario.UsuarioID ' PaisLista.Add(NovoPais) ctx.AddToCursosSet(Novo) ctx.SaveChanges() LimpaCampos() Catch ex As Exception MsgBox("Erro : " & ex.Message) End Try
Respostas
-
Olá Gusta,
Aqui neste exemplo eu demonstro como fazer isso: http://code.msdn.microsoft.com/EF-Code-First-Design-1558305c
Estou utilizando EF Code First, mas não muda muito em relação ao Entity Framework comum. O código para vc basear sua lógica é esse:
public void Save(Model.Book book) { using (DataContext context = new DataContext()) { if (book.Id == 0) { context.Entry(book.Category).State = EntityState.Unchanged; foreach (var author in book.Authors) { context.Entry(author).State = EntityState.Unchanged; } context.Books.Add(book); } else { var bookToUpdate = context.Books.Include("Category").Include("Authors").Where(b => b.Id == book.Id).Single(); UpdateBookAuthors(book.Authors.Select(a => a.Id).ToArray(), bookToUpdate, context); bookToUpdate.Year = book.Year; bookToUpdate.Name = book.Name; bookToUpdate.CategoryId = book.Category.Id; context.Entry(bookToUpdate).State = EntityState.Modified; } context.SaveChanges(); } } private void UpdateBookAuthors(int[] selectedAuthors, Model.Book bookToUpdate, DataContext context) { if (selectedAuthors == null) { bookToUpdate.Authors = new Model.Authors(); return; } var selAuthors = new HashSet<int>(selectedAuthors); var bookAuthors = new HashSet<int>(bookToUpdate.Authors.Select(a => a.Id)); foreach (var author in context.Authors) { if (selAuthors.Contains(author.Id)) { if (!bookAuthors.Contains(author.Id)) { bookToUpdate.Authors.Add(author); context.Entry(author).State = EntityState.Modified; } else { context.Entry(author).State = EntityState.Unchanged; } } else { if (bookAuthors.Contains(author.Id)) { bookToUpdate.Authors.Remove(author); } } } }
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:19
Todas as Respostas
-
Olá Gusta,
Aqui neste exemplo eu demonstro como fazer isso: http://code.msdn.microsoft.com/EF-Code-First-Design-1558305c
Estou utilizando EF Code First, mas não muda muito em relação ao Entity Framework comum. O código para vc basear sua lógica é esse:
public void Save(Model.Book book) { using (DataContext context = new DataContext()) { if (book.Id == 0) { context.Entry(book.Category).State = EntityState.Unchanged; foreach (var author in book.Authors) { context.Entry(author).State = EntityState.Unchanged; } context.Books.Add(book); } else { var bookToUpdate = context.Books.Include("Category").Include("Authors").Where(b => b.Id == book.Id).Single(); UpdateBookAuthors(book.Authors.Select(a => a.Id).ToArray(), bookToUpdate, context); bookToUpdate.Year = book.Year; bookToUpdate.Name = book.Name; bookToUpdate.CategoryId = book.Category.Id; context.Entry(bookToUpdate).State = EntityState.Modified; } context.SaveChanges(); } } private void UpdateBookAuthors(int[] selectedAuthors, Model.Book bookToUpdate, DataContext context) { if (selectedAuthors == null) { bookToUpdate.Authors = new Model.Authors(); return; } var selAuthors = new HashSet<int>(selectedAuthors); var bookAuthors = new HashSet<int>(bookToUpdate.Authors.Select(a => a.Id)); foreach (var author in context.Authors) { if (selAuthors.Contains(author.Id)) { if (!bookAuthors.Contains(author.Id)) { bookToUpdate.Authors.Add(author); context.Entry(author).State = EntityState.Modified; } else { context.Entry(author).State = EntityState.Unchanged; } } else { if (bookAuthors.Contains(author.Id)) { bookToUpdate.Authors.Remove(author); } } } }
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:19
-
Olá Gusta,
Alguma evolução nessa thread?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Olá Gustavo,
Eu realmente disposto a ajuda-lo.
Onde esta tendo problemas?
Quer que eu ajuste o código para vc?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
-
Gusta,
Vc poderia me enviar os scripts SQL para eu criar as tabelas no meu SQL?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil