2016-09-06 7 views
1

私はいつも私がこの例外を持っているアクションボタンを押すので問題があります。ObjectDisposedException EFエラー

This error

この部分は私にエラー

public void InserirComCopia(TabelaPreco tabPrec, string copiarDe) 
    { 
     var lista = new List<PrecoProduto>(); 
     var tb = InserirTabelaVazia(tabPrec); 
     var rep = new PrecoRepositorio(); 
     lista = rep.ObterPrecoPorTabela(Int32.Parse(copiarDe)); 
     var ls = new List<PrecoProduto>(); 

     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      foreach (var item in lista) 
      { 
       var p = new PrecoProduto() 
       { 
        preco = item.preco, 
        TabPreco = tb, 
        TabPrecoId = tb.Id, 
        Produto = item.Produto, 
        ProdutoId = item.ProdutoId 
       }; 
       ls.Add(p); 
      } 
      context.PrecoProduto.AddRange(ls); 
      context.SaveChanges(); 
     } 
    } 

を与えることであり、これはすべて私のコントローラです:

public TabelaPreco ObterTablePrecoPorID(int Id, List<TabelaPreco> tabelaPreco) 
    { 
     return tabelaPreco.Where(t => t.Id == Id) 
          .FirstOrDefault(); 
    } 
    public List<TabelaPreco> ObterTodasAsTabelas() 
    { 
     List<TabelaPreco> model = new List<TabelaPreco>(); 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      model = context.TabelaPreco.ToList(); 
     } 
     return model; 
    } 
    public List<TabelaPreco> Buscar(string busca) 
    { 
     List<TabelaPreco> model = new List<TabelaPreco>(); 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      model = context.TabelaPreco.Where(tb => tb.Desc.Contains(busca)).ToList(); 
     } 
     return model; 
    } 
    public TabelaPreco InserirTabelaVazia(TabelaPreco tab) 
    { 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      context.TabelaPreco.Add(tab); 
      context.SaveChanges(); 
      return tab; 
     } 
    } 
    public void Deletar(int id) 
    { 
     var tabela = new TabelaPreco(); 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      tabela = context.TabelaPreco.Where(tb => tb.Id == id) 
             .FirstOrDefault(); 
      context.TabelaPreco.Remove(tabela); 
      context.SaveChanges(); 
     } 
    } 
    public void InserirComCopia(TabelaPreco tabPrec, string copiarDe) 
    { 
     var lista = new List<PrecoProduto>(); 
     var tb = InserirTabelaVazia(tabPrec); 
     var rep = new PrecoRepositorio(); 
     lista = rep.ObterPrecoPorTabela(Int32.Parse(copiarDe)); 
     var ls = new List<PrecoProduto>(); 

     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      foreach (var item in lista) 
      { 
       var p = new PrecoProduto() 
       { 
        preco = item.preco, 
        TabPreco = tb, 
        TabPrecoId = tb.Id, 
        Produto = item.Produto, 
        ProdutoId = item.ProdutoId 
       }; 
       ls.Add(p); 
      } 
      context.PrecoProduto.AddRange(ls); 
      context.SaveChanges(); 
     } 
    } 
    public TabProdListModel PegarProdutosDaTabela(int id) 
    { 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      var modelTab = context.TabelaPreco.Where(tb => tb.Id == id).First(); 
      var modelProd = context.Produto.ToList(); 
      var model = context.TabelaPreco 
          .Where(t => t.Id == id) 
          .Join(
           context.PrecoProduto, 
           t => t.Id, 
           x => x.TabPrecoId, 
           (t, x) => new { t, x } 
          ) 
          .Join(
           context.Produto, 
           p => p.x.ProdutoId, 
           y => y.Id, 
           (p, y) => new ListProduto 
           { 
            produtoId = y.Id, 
            produto = y.Nome, 
            precoProduto = p.x.preco, 
            Cor = y.Cor, 
            Tamanho = y.Tamanho 
           } 
          ) 
          .ToList(); 

      var ls = new TabProdListModel() 
      { 
       tabela = modelTab, 
       Produtos = modelProd, 
       TdProdutos = model 
      }; 

      var prod = ls.Produtos.ToList(); 
      if (modelProd.Count() != 0) 
       foreach (var item in ls.Produtos) 
       { 
        foreach (var td in ls.TdProdutos) 
        { 
         if (item.Id == td.produtoId) 
         { 
          prod.Remove(item); 
          break; 
         } 

        } 
       } 

      ls.Produtos = prod; 
      return ls; 
     } 
    } 
    public void AdicionarProdTab(int Produto, double Valor, int Tabela) 
    { 
     using(var context = new indigo.DataModel.IndigoContext()) 
     { 
      var produto = context.Produto.Where(p => p.Id == Produto).FirstOrDefault(); 
      var tabela = context.TabelaPreco.Where(tp => tp.Id == Tabela).FirstOrDefault(); 
      var precoProduto = new PrecoProduto() 
      { 
       preco = Valor, 
       Produto = produto, 
       TabPreco = tabela 
      }; 
      context.PrecoProduto.Add(precoProduto); 
      context.SaveChanges(); 
     } 
    } 
    public void EditarProdutoTabela(int ProdutoId, double valor, int tabela) 
    { 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      var precoProduto = context.PrecoProduto.Where(x => x.ProdutoId == ProdutoId && x.TabPrecoId == tabela).FirstOrDefault(); 
      precoProduto.preco = valor; 
      context.PrecoProduto.Attach(precoProduto); 
      var Entry = context.Entry(precoProduto); 
      Entry.Property(e => e.preco).IsModified = true; 
      context.SaveChanges(); 
     } 
    } 
    public void Remover(int id) 
    { 

    } 

私を助けてください!ここでは、その後TabPreco = tb、およびProduto = item.Produto、私はありません: マイリポジトリ:この行で

public List<PrecoProduto> ObterPrecoPorTabela(int copiarDe) 
    { 
     var Precos = new List<PrecoProduto>(); 
     using (var context = new indigo.DataModel.IndigoContext()) 
     { 
      Precos = context.PrecoProduto.Where(pp => pp.TabPrecoId == copiarDe).ToList(); 
     } 
     return Precos; 
    } 
+0

どのラインが正確にエラーを投げていますか?それはSaveChanges()ですか? Iで – KSib

+0

は言う: foreachの(リスタでVAR項目) {VARのP =新しいPrecoProduto(){ プレコ= item.preco、 TabPreco = TB、 TabPrecoId = tb.Id、 Produto = item.Produto 、 ProdutoId = item.ProdutoId }; ls.Add(p); } またはよりよく知られている行67 –

+0

ここにコード内の内容は、 'rep.ObterPrecoPorTabela();'?あなたは実際に評価されていないリストを返すかもしれませんが、コンテキストをすでに破棄していますので、列挙できません。 – KSib

答えて

1

私の悪い英語、ブラジルのコード学生I'ma

UPDATEのため申し訳ありません:

PS肯定的にすることができます。データベースコンテキストに正しく接続されていて、もはや接続されていないものに接続しようとしているオブジェクトを取得しています。おそらくそれが役立つかどうかを確認するためにそれらの行を削除しようとしますか?なぜそれらを設定してIDを設定する必要があるのか​​想像できません。あなたはどちらか一方だけを行う必要があります。

関連する問題