2008-09-30 5 views
0

J'utilise LINQ to SQL et C#. J'ai deux classes LINQ: Utilisateur et Réseau.LINQ Submit Modifications ne pas soumettre de modifications

L'utilisateur a UserID (clé primaire) et NetworkID

réseau a NetworkID (clé primaire) et un adminid (un UserID)

Le code suivant fonctionne très bien:

user.Network.AdminID = 0; 
db.SubmitChanges(); 

Cependant, si j'accède à l'ID Admin avant d'effectuer la modification, le changement ne se produit jamais dans la base de données. Donc ce qui suit ne fonctionne pas:

if(user.Network.AdminID == user.UserID) 
{ 
    user.Network.AdminID = 0; 
    db.SubmitChanges(); 
} 

Il est dans l'instruction if et appelle les changements de soumission. Pour une raison quelconque, les modifications apportées à AdminID ne parviennent jamais à la base de données. Pas d'erreur lancée, le changement ne prend jamais ".

Une idée de ce qui pourrait causer cela?

Merci.

Répondre

2

Je viens de faire un test rapide et ça marche très bien pour moi.

Je déteste demander cela, mais êtes-vous sûr que l'instruction if est vraie? Il se pourrait que vous ne frappiez pas le code qui change la valeur.

À part cela, nous pourrions avoir besoin de plus d'informations. Quelles sont les propriétés de ce membre? Avez-vous tracé dans l'instruction set pour vous assurer que la valeur est définie avant d'appeler SubmitChanges? L'entité Linq a-t-elle la nouvelle valeur après SubmitChanges? Ou est-ce que la base de données ET l'entité Linq échouent à prendre la nouvelle valeur? En bref, ce code devrait fonctionner ... donc quelque chose d'autre quelque part est probablement faux.

0

Voici l'original post.


Voici un setter généré par le concepteur LinqToSql.

Code Snippet

{ 
    Contact previousValue = this._Contact.Entity; 
    if (((previousValue != value) 
    || (this._Contact.HasLoadedOrAssignedValue == false))) 
    { 
    this.SendPropertyChanging(); 
    if ((previousValue != null)) 
    { 
     this._Contact.Entity = null; 
     previousValue.ContactEvents.Remove(this); 
    } 
    this._Contact.Entity = value; 
    if ((value != null)) 
    { 
     value.ContactEvents.Add(this); 
     this._ContactID = value.ID; 
    } 
    else 
    { 
     this._ContactID = default(int); 
    } 
    this.SendPropertyChanged("Contact"); 
    } 
} 

Cette ligne définit la propriété de l'enfant au parent.

this._Contact.Entity = value; 

Cette ligne ajoute l'enfant à la collection

value.ContactEvents.Add(this); 

du parent Le setter pour l'ID ne dispose pas de cette deuxième ligne. Donc, avec les entités autogénérées ... Ce code produit un comportement inattendu:

myContactEvent.ContactID = myContact.ID; 

Ce code est bon:

myContactEvent.Contact = myContact; 

Ce code est également bon:

myContact.ContactEvents.Add(myContactEvent); 
0

J'ai eu ce problème. La raison en était une ligne stupide de code:

DBDataContext db { get { return new DBDataContext(); } } 

évidemment il devrait être:

DBDataContext db = new DBDataContext(); 
Questions connexes