2009-05-06 5 views
1

Compte tenu de ce schéma:Comment mettre à jour une ligne SQL avec un identifiant avec LINQ to SQL?

Fruits 
- FruitID  INT PK 
- FruitName  NVARCHAR(30) 
- FruitStatusID INT NULL FK: Statuses 

Statuses 
- StatusID  INT PK 
- StatusName NVARCHAR(30) 

Si j'ai un FruitID à la main (juste un int, et non un objet de fruits), comment puis-je mettre à jour le FruitName et Null sur FruitStatusID sans charger l'objet Fruit de la première base de données ?

Note: this solution m'obtient assez loin, mais je ne peux pas comprendre comment annuler une colonne FK.

Réponses en C# ou VB, merci!

+1

Cela se sent comme un cas d'optimisation prématurée. Aller avec SQL droit si vous êtes si préoccupé par les performances. Vous pouvez mélanger l'exécution de la commande ado.net et LINQ to SQL en une seule transaction si nécessaire. – JohnOpincar

+0

Ceci est un exemple simplifié. Aussi, si je peux facilement éviter de récupérer un enregistrement de la base de données juste pour le mettre à jour, je le ferai - je ne pense pas que ce soit prématuré. –

Répondre

0

Cela fonctionne, mais semble inutilement compliqué:

''//initialize the values I'm going to null out to something 
Dim Tag As Data_Tag = New Data_Tag() With { 
    .Data_Tag_ID = DataTagID, 
    .Last_Error_DateTime = New DateTime(), 
    .Last_Error_Message = "", 
    .Last_Error_Severity_Type_ID = -1 } 

''//start change tracking 
DB.Data_Tags.Attach(Tag) 

''//record changes to these properties (must be initialized above) 
Tag.Last_Error_DateTime = Nothing 
Tag.Last_Error_Message = Nothing 
Tag.Last_Error_Severity_Type_ID = Nothing 

DB.SubmitChanges() 

Certes, il y a une meilleure façon!

(note: la syntaxe de commentaire bizarre est uniquement pour le code highliger - il n'aime pas les commentaires VB style)