Usuário com melhor resposta
ERRO DE multiplicity of relationship

Pergunta
-
Prezados,
Estou com o seguinte erro:
entity A constraint violation occurred multiplicity of relationship: An EntityReference can have no more than one related object, but the query returned more than one related object.
Este erro ocorre quando executo o Linq
var vendaitens = (from v in ctx.VendaItem where v.Venda.Id == IdVenda select v).ToList();
Ao acessar a propriedade Produto.Id por ex. o erro ocorre...
Vejam como foi feito o mapeamento...
André Perpetuo
Respostas
-
Alterei o mapeamento conforme colocou e adicionei a navigation property VendaItem em produto e mesmo assim ainda persisti.
Eu limpei as tabelas venda e VendaItem e Inseri uma venda de um determinado produto e quando executo:
var vendaitens = (from v in ctx.VendaItem where v.Venda.Id == IdVenda select v).ToList()...
Funciona perfeitamente!
Quando realizo outra venda para o mesmo produto o erro ocorre.....
André Perpetuo
Coloque uma imagem da sua tabela ?- Marcado como Resposta André Perpetuo quarta-feira, 22 de janeiro de 2014 19:53
Todas as Respostas
-
Ta estranho neh?!
Olha só
Venda tem a Chave Primaria "Id" e mais um campo Codigo Venda ?
Ai
VendaItem tem Chave Primaria "Id", idItem que acho eu deve relacionar com Produto ??? e
Produto tem a Chave Primaria "Id" ????
Eu vi isso, mas, se pode me explicar porque no meu entender
seria!!!!
Venda -> Id (Primary Key)
VendaItem -> Id (Primary Key), VendaId (Forekeing Key (da Primary Key Venda (Id)) e ProdutoId mesma lógica !!!
Bom se poderia verificar e me falar?
-
Caro Cezar,
Na entidade Venda a chave é o Id... O CodigoVenda não compõem a chave!
VendaItem Possui apenas a PK Id e FK Venda e Produto
E o produto possui apenas o Id como chave.
Veja Código SQL que o EF está gerando para essas entidades.
CREATE TABLE [dbo].[Venda] (
[Id] uniqueidentifier NOT NULL,
[QuantidadeParcelas] smallint NOT NULL,
[PrimeiraParcelaDias] smallint NOT NULL,
[IntervaloParcelas] smallint NOT NULL,
[DataCriacao] datetime NOT NULL,
[DataVenda] datetime NOT NULL,
[ValorTotalSemDesconto] decimal(18,2) NOT NULL,
[ValorTotalComDesconto] decimal(18,2) NOT NULL,
[DescricaoPagamento] nchar(40) NULL,
[DiaVencimento] smallint NULL,
[Status] nvarchar(max) NULL,
[OrigemVenda] nvarchar(max) NULL,
[Dominio] uniqueidentifier NOT NULL,
[Empresa] uniqueidentifier NOT NULL,
[CodigoVenda] nvarchar(12) NOT NULL,
[Vendedor_Id] uniqueidentifier NULL,
[Cliente_Id] uniqueidentifier NULL,
[CondicaoPagamento_Id] uniqueidentifier NOT NULL,
[Usuario_Id] uniqueidentifier NOT NULL,
[TipoPagamento_Id] uniqueidentifier NOT NULL
);
CREATE TABLE [dbo].[VendaItem] (
[Id] uniqueidentifier NOT NULL,
[idItem] int NULL,
[Valor] decimal(18,2) NULL,
[Status] nchar(2) NULL,
[Quantidade] int NOT NULL,
[ValorVendido] decimal(18,2) NULL,
[Produto_Id] uniqueidentifier NOT NULL,
[Venda_Id] uniqueidentifier NOT NULL
);
CREATE TABLE [dbo].[Produto] (
[Id] uniqueidentifier NOT NULL,
[DescricaoResumida] nvarchar(120) NOT NULL,
[DescricaoDetalhada] nvarchar(800) NULL,
[Tags] nvarchar(100) NULL,
[QuantidadeEstoque] int NOT NULL,
[PrecoCusto] decimal(18,2) NULL,
[PrecoVenda] decimal(18,2) NOT NULL,
[CodReferencia] nchar(20) NULL,
[CodigoReferenciaFabricante] nvarchar(20) NULL,
[CodigoBarras] nvarchar(80) NULL,
[Marca] nvarchar(30) NULL,
[CodigoInterno] nvarchar(8) NULL,
[Dominio] uniqueidentifier NOT NULL,
[Empresa] uniqueidentifier NOT NULL,
[Ativo] bit NOT NULL,
[Categoria_Id] uniqueidentifier NOT NULL,
[Fornecedor_Id] uniqueidentifier NULL
);
Não consigo ver o que está errado....
André Perpetuo
-
-
Relacionamento de Banco Proposto!
Perceba que Produto tem um relacionamento com o VendaItem que o seu não tem !!! Ou seja, na Entidade Produto não tem a Collection VendaItem como tem no meu exemplo ... eu reproduzi as tabelas coloque as chaves e relacionamentos conforme a lógico vista, e no meu caso rodou perfeitamente! Dá uma olhada no relacionamento entre as Tabelas VendaItem e Produto e por favor verifique se as chave primaria corresponde ao relacionamento nas tabelas com suas chaves estrangeiras !!! Outro fator não duplique de mandeira nenhuma dois produtos na tabela de VendaItem se o cara digitar de novo some mais os produtos a que já tem ou então avise o usuário com uma mensagem, porque, esse fator pode também contribuir a esses erros
Dica: perguntei a especialistas de banco para identifica (eu mesmo sempre fiz assim) use BigInt ou Int com Identity é a melhor forma de identificar um registro ... mas, é uma dica porque dessa forma fica incomodo os relacionamentos!!!
-
Alterei o mapeamento conforme colocou e adicionei a navigation property VendaItem em produto e mesmo assim ainda persisti.
Eu limpei as tabelas venda e VendaItem e Inseri uma venda de um determinado produto e quando executo:
var vendaitens = (from v in ctx.VendaItem where v.Venda.Id == IdVenda select v).ToList()...
Funciona perfeitamente!
Quando realizo outra venda para o mesmo produto o erro ocorre.....
André Perpetuo
-
Alterei o mapeamento conforme colocou e adicionei a navigation property VendaItem em produto e mesmo assim ainda persisti.
Eu limpei as tabelas venda e VendaItem e Inseri uma venda de um determinado produto e quando executo:
var vendaitens = (from v in ctx.VendaItem where v.Venda.Id == IdVenda select v).ToList()...
Funciona perfeitamente!
Quando realizo outra venda para o mesmo produto o erro ocorre.....
André Perpetuo
Coloque uma imagem da sua tabela ?- Marcado como Resposta André Perpetuo quarta-feira, 22 de janeiro de 2014 19:53
-
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 22 de janeiro de 2014 20:05