Pas på med ExecuteCommand i LINQ 2 SQL

ExecuteCommand kan være enormt handy hvis du f.eks synes det er svært at udtrykke dig via LINQ. Jeg har dog erfaret at man skal passe enormt meget på ved at bruge disse indbyggede SQL metoder på DataContext typen.

Lad os sige jeg laver en update på noget data uden om min DataContext klasse. Det kan jeg sagtens, fordi DataContext har metoden ExecuteCommand på sig som ser således ud:

public int ExecuteCommand( string command, params object[] parameters );

public static void Update( int id )
{
    LinqUtil.Db.ExecuteCommand( String.Format( "UPDATE data SET col = NULL WHERE (pk_col = {0})", id ) );
}

Piece of cake :0), nu er min data opdateret i databasen.

Hvis jeg så efterfølgende prøver at opdatere noget af det samme data via LINQ, med SubmitChanges, så vil den opdatering ikke virke korrekt på mine data.

if( id > 0 ) {
    //Update via DataContext's ExecuteCommand, som virker fint.
}

SomeObject obj = null;
foreach( var inst in listOfObjects ) {
    obj = ObjectQueries.GetObject( inst );
    obj.col = id;
    DataContextInstance.SubmitChanges(); //LINQ 2 SQL. Opdatere godt nok værdien, men hver anden gang bliver værdien sat til NULL.
}

Hvis jeg underlader at bruge SQL i den første metode, men derimod LINQ'er mig ud af det virker alt som en drøm:

public static void Update( int id )
{
    var query = ( from objects in DataContextInstance.data
                  where objects.pk_col == id
                  select objects ).ToList();

    foreach( var obj in query ) {
        obj.col = null;
        DataContextInstance.SubmitChanges();
    }
}

Hvor sker det her mon ?