none
insert EF N:N vb.net RRS feed

  • 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

    terça-feira, 17 de julho de 2012 18:33

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

    terça-feira, 17 de julho de 2012 19:03
    Moderador

Todas as Respostas