2010-05-08 4 views
1

J'utilise LinqToSql comme vous l'avez vu sur le sujet.Un membre qui est calculé ou généré par la base de données ne peut pas être modifié

J'ai une table et quelques colonnes dedans. Il y a une colonne pour montrer l'état d'enregistrement.

0 : Not approved yet 
1 : Approved 
2 : Deleted 

Lorsque l'enregistrement est inséré en premier, sa valeur est 0 (valeur par défaut). Lorsque l'utilisateur a approuvé sa valeur est en train de changer à 1, mais que je reçois cette erreur:

Value of member 'state' of an object of type 'News' changed. 
A member that is computed or generated by the database cannot be changed. 

Voici le code de test:

DataClassesDataContext dc = new DataClassesDataContext(); 
var b = dc.GetTable<Ekler>().Where(p => p.ek_id == 1).FirstOrDefault(); 
if (b!=null) 
{ 
    b.state= "1"; 
    dc.SubmitChanges(); 
} 

Que dois-je faire pour passer ce problème?

Répondre

3

Vous devez consulter la définition de la colonne "state" dans le concepteur pour le contexte de données et/ou la base de données elle-même. Fondamentalement LINQ to SQL pense que c'est quelque chose comme une valeur générée automatiquement ou qui est calculée dans la base de données - pas quelque chose qui devrait être édité à la main. Si doit être être mis à jour manuellement (ce qui ressemble à), vous devez le dire à LINQ to SQL.

+0

Je crée une classe de contexte pour mon projet en héritant de DataContext. J'écris donc manuellement toutes les classes d'entités et leurs propriétés de colonnes. J'ai changé son attribut IsDbGenerated (en fait j'ai supprimé). Maintenant, je peux changer sa valeur sans avoir d'erreur mais quand j'ai inséré un nouvel enregistrement dans la table, la colonne "state" obtient la valeur NULL. – uzay95

+0

@ uzay95: Eh bien, je regarderais de près tout ce que vous avez spécifié dans le contexte de données - et à quoi ressemble le SQL généré. Cela semble définitivement être un problème dans la façon dont vous avez configuré le contexte. –

0

Je faisais face au même problème lorsque nous essayons de mettre à jour l'enregistrement dans la base de données. nous pouvons insérer mais quand nous essayons de mettre à jour les enregistrements avec l'une des colonnes calculées dans la base de données, cela donne une erreur comme: "La valeur du membre d'un objet de type changé.Un membre qui est calculé ou généré par la base de données ne peut pas être modifié."

Solution: Nous ne pouvons pas mettre à jour ce champ dans la base de données mais nous pouvons éditer le champ de référence de la colonne calculée qui s'y réfère.Lorsque nous mettons à jour le champ de référence, la colonne calculée met à jour automatiquement ce champ. Informez-moi si vous avez d'autres questions.

Merci ..

Questions connexes