2009-10-25 4 views
0

Je suis vraiment un newbie LINQ. J'ai un problème inconnu:SubmitChanges() mise à jour seulement 1 champ?

public static int save(TEntity obj) 
    { 
     var table = dbo.GetTable<TEntity>(); 
     var mapping = dbo.Mapping.GetTable(typeof(TEntity)); 
     var pkfield = mapping.RowType.DataMembers.Where(d => d.IsPrimaryKey).Take(1).SingleOrDefault(); 
     if (Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null)) == 0) 
      table.InsertOnSubmit(obj); 
     try 
     { 
      dbo.SubmitChanges(); 
     } 
     catch (ChangeConflictException e) 
     { 
      dbo.SubmitChanges(); 
     } 
     if (dbo.ChangeConflicts.Count == 0) 
     { 
      ClearCache(dbo); 
      return Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null)); 
     } 
     else 
     { 
      dbo.ChangeConflicts.ResolveAll(System.Data.Linq.RefreshMode.KeepCurrentValues); 
      return 0; 
     } 
    } 

Lors de l'utilisation de cette méthode, un seul champ a été mis à jour !! Voici mon journal:

UPDATE [dbo].[tbl_album] 
SET [dt_m_date] = @p1 
WHERE [i_album_id] = @p0 
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1] 
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1256485605] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918 

Même j'ai changé presque de champs, ma table a déjà la clé primaire. Mais toujours problème.

Aidez s'il vous plaît!

Répondre

0

Avez-vous parcouru votre méthode save pour voir ce que le code faisait? A-t-il trouvé la bonne colonne de clé primaire et a-t-elle effectivement détecté la présence de la clé primaire existante?

Quels champs avez-vous dans votre tbl_album - avez-vous vérifié qu'ils ne sont pas tous marqués comme étant en lecture seule (peu probable, mais quand même - vérifiez pour être sûr!).

Je ne vois pas d'anomalie fondamentale avec votre code en ce moment, cela semble un peu compliqué à mon goût, mais ça devrait fonctionner, je crois.

Marc

MISE À JOUR:
Assurez-vous que vos colonnes de table ne sont pas tous en lecture seule! :)

alt text http://i35.tinypic.com/mt8sw2.png

+0

Merci Marc. J'avais vérifié cette méthode avec soin. Je ne sais toujours pas pourquoi cette merde arrive. Tout va bien jusqu'à ce que SubmitChanges() soit exécuté. Tous mes champs ont assez de set & get méthode aussi bien. –

+0

Comme mon code est trop long, je ne peux pas tous les ramener ici. De toute façon, presque des colonnes sont définies avec les propriétés suivantes: [Colonne (Name = "i_artist_id", Stockage = "_ArtistID", DbType = "Int NON NULL DEFAULT 0", CanBeNull = false, UpdateCheck = UpdateCheck.Never) ] Que voulez-vous dire à propos de la propriété 'readonly'? Je n'ai trouvé aucune telle chose comme ça. Il n'y a pas non plus de champ 'readonly' dans ma base de données. Merci Marc! –

+0

Marc, J'ai vérifié, mais tous en lecture seule sont faux. Y a-t-il un moyen raisonnable? –

0

Après avoir fait beaucoup de tests, j'ai trouvé une chose: toutes les clés étrangères ne sont pas mis à jour, les champs normaux sont corrects. Alors dites-moi s'il y a un moyen raisonnable de causer cette merde?

J'ai beaucoup googlé mais je n'ai rien trouvé ...

Questions connexes