首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectDisposedException EF错误

ObjectDisposedException EF错误
EN

Stack Overflow用户
提问于 2016-09-07 02:15:35
回答 1查看 31关注 0票数 1

我遇到了一个问题,因为我总是按下操作按钮,我得到了这个异常。

这部分给了我一个错误

代码语言:javascript
复制
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();
        }
    }

这是我所有的控制器:

代码语言:javascript
复制
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)
    {

    }

请帮帮我!

为我糟糕的英语感到抱歉,我是一个学习巴西代码的学生

更新:我的存储库:

代码语言:javascript
复制
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;
    }
EN

回答 1

Stack Overflow用户

发布于 2016-09-07 02:56:20

在这一行:TabPreco = tb,然后在这里Produto = item.Produto,我不确定你能做什么。您正在获取一个正确连接到数据库上下文的对象,并试图将其附加到不再附加的对象。也许可以尝试删除这些行,看看是否有帮助?我无法想象为什么需要同时设置这些和I。你应该只需要做一个或另一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39355396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档