Qu'est-ce que pourrait être la cause db.SubmitChanges () de ne pas travailler dans LINQ to SQL?

StackOverflow https://stackoverflow.com/questions/1579033

  •  21-09-2019
  •  | 
  •  

Question

J'ai mis en place un exemple très simple avec LINQ-TO-SQL dans WPF.

Je peux obtenir un objet (PageItem) comme ça et je peux changer la propriété et quand je l'appelle SubmitChanges () il donne moi aucune erreur mais n'enregistre pas le changement.

MainDataContext db = new MainDataContext();
var pageItem = (from p in db.PageItems
              where p.Id == 1
              select p).SingleOrDefault();

pageItem.Title = "changed";
db.SubmitChanges();

Qu'est-ce qui pourrait causer SubmitChanges de ne pas soumettre les modifications?

PLUS D'INFO:

Cela ne fonctionne soit, même le db.ExecuteCommand ne fonctionne pas non, et étrangement lors du débogage F11 ne pas l'étape dans SubmitChanges () ou ExecuteCommand (), pourquoi ne puis-je pas dans les?

using (var db = new MainDataContext())
{
    var pageItem = (from p in db.PageItems
                    where p.Id == 1
                    select p).SingleOrDefault();

    pageItem.Title = "changed";
    db.SubmitChanges();

    db.ExecuteCommand("INSERT INTO PageItems (Title) VALUES ('this is the title')");


    if (pageItem != null)
        MainContent.Children.Add(new QuickForm(pageItem));

}

Plus d'info:

Le db.Log = Console.Out me donne ceci:

SELECT [t0].[Id], [t0].[IdCode], [t0].[Title], [t0].[Description], [t0].[DisplayOrder]
FROM [dbo].[PageItems] AS [t0]
WHERE [t0].[Id] = @p0
'TestPageManager23434.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationFramework.resources\3.0.0.0_de_31bf3856ad364e35\PresentationFramework.resources.dll'
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

INSERT INTO PageItems (Title) VALUES ('this is the title')
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

The thread 0x1190 has exited with code 0 (0x0).

RÉPONSE

La solution était triple:

  • Je changeais une autre base que je regardais en studio visuel, solution:

    var db = new MainDataContext (@ "C: \ Users \ TestUser \ Documents \ Visual Studio 2008 \ Projects \ TestPageManager23434 \ TestPageManager23434 \ Data \ Main.mdf"))

  • qui a fait le travail à jour, mais pas SubmitChanges (), la solution était de mettre la clé primaire.

  • il encore ne montrait pas tous les chagnes, problème était que j'avais un certain nombre de fenêtres « montrent des données » ouvertes qui ne sont pas mis à jour

Était-ce utile?

La solution

Cela peut se produire si vous ne disposez pas d'une clé primaire définie sur les tables dans SQL Server

Autres conseils

Pour une raison quelconque le contexte ne peut pas être suivi des modifications. Essayez votre câblage db.Log à un écrivain et inspecter ce que LINQ-> SQL est en train de faire lorsque vous appelez SubmitChanges() ..

db.Log = Console.Out;

Ensuite, vous pouvez regarder la fenêtre de sortie en cours d'exécution dans le débogage et voir ce qui se passe.

Vous utilisez l'expression SQL fichier mdf?

Il y a un article sur la façon dont cela pourrait vous causer d'obtenir une copie du fichier et non l'original, ce qui provoque les symptômes que vous décrivez.

FTA:

  

Je pense que le système de projet ou d'un serveur   Assistant explorateur offre à «copier votre   mdf dans votre répertoire de projet.   Peut-être que vous utilisez sur une copie de   la base de données et la visualisation de l'autre   explorateur de serveur.

J'ai eu le même problème dans lequel l'enregistrement dans la Base de données Je vois dans mon projet n'a pas été modifié par la méthode SubmitChanges.

Après tant d'essais et recherches, je trouve que le système mis une autre version du Base de données Northwnd.mdf dans le \Bin\Debug\Northwnd.mdf répertoire racine du projet. C'est là que les changements, parfaitement, se sont produits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top