2009-07-20 7 views
0

Je reçois l'exception suivante lorsque je tente de mettre à jour une table en utilisant LINQ to SQL:Comment mettre à jour une table avec une clé composée par plus d'un champ

La valeur membre « IdSeccionNovedad » d'un objet de type 'Nouveauté' a changé . Vous ne pouvez pas modifier un membre définissant l'identité de l'objet . Ajouter un nouvel objet avec une nouvelle identité et supprimer le existant.

Wich première phrase peut se traduire par quelque chose comme:

Impossible de modifier membre qui définit l'identité objet

Le tableau est le suivant:

CREATE TABLE [dbo].[Novedades](
    [IdNovedad] [int] NOT NULL, 
    [IdSeccionNovedad] [int] NOT NULL, 
    [Antetitulo] [varchar](250) NULL, 
    [Titulo] [varchar](250) NOT NULL, 
    [Sumario] [varchar](max) NULL, 
    [Cuerpo] [varchar](max) NULL, 
    [FechaPublicacion] [smalldatetime] NOT NULL, 
    [Activo] [bit] NOT NULL, 
CONSTRAINT [PK_Novedades] PRIMARY KEY CLUSTERED 
(
    [IdNovedad] ASC, 
    [IdSeccionNovedad] ASC 
) 

Je sais Je peux résoudre cela en utilisant une procédure stockée, mais comment puis-je résoudre cette utilisation? ng Linq à Sql?

Répondre

0

Ce que je fais est d'utiliser une mise à jour procédure stockée à la table, parce que je ne peux pas défaire la conception de base de données.

Pour les modèles à venir, je vais utiliser des tableaux avec seulement 1 clé.

1

Clés composites sont ... bien carrément laid et à mon avis, une indication de la mauvaise conception de base de données. Cependant, puisque vous semblez vouloir aller esta ... la conception de table de routage en elle-même ne suffit pas pour quiconque de comprendre pourquoi cela ne fonctionne pas. En théorie, vous ne devriez pas avoir de problèmes tant que vos valeurs sont valides. Pouvez-vous s'il vous plaît fournir le code que vous utilisez pour mettre à jour?

Cordialement.

+0

Yah, je suis d'accord. Je à peu près toujours mis en place ma db avec toutes les tables Avoir un numérique ROWID, colonne d'identité. Cela et utiliser comme ma clé primaire, puis un ajouter un index unique s'il y a un multi-champ logique « clé » qui doit être exécutée. – eidylon

Questions connexes