Frage

Ich habe einige Codes, fügen Daten in einige Tabellen (eine Tabelle hat eine Filestream-Spalte) und dann SubmitChanges rufen, nachdem es geschehen ist.

db.Log = new System.IO.StreamWriter(@"c:\windows\temp\linq.log") { AutoFlush = true };
db.SubmitChanges(ConflictMode.FailOnFirstConflict);

Ich habe die folgenden Links verwiesen wird, aber sie scheinen nicht mein Problem zu sein:

LINQ to SQL: SubmitChanges () nicht funktioniert ?

LINQ nicht auf .SubmitChanges Aktualisierung ()

Jede Tabelle hat einen Primärschlüssel. alt text

Ich habe 14 Tabellen und ich sehe 14 IsPrimaryKey = true in den linq.designer.cs enthalten

Auch wenn ich sehe, dass „AutoSync = AutoSync.OnInsert“ aus den Dateien Tabelle fehlt, aber ich denke, das ist, weil IDENTITY nicht gesetzt ist (als Primärschlüssel GUID).

Wenn ich die Datenbank zu überprüfen, wurde nichts in sie eingefügt. Die linq.log zeigt:

INSERT INTO [dbo].[Files]([fileID], [FileContents], [dteCreated], [dteLastModified], [txtDesc], [mimeID], [txtName], [txtTitle], [dteDeleted])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8)
-- @p0: Input UniqueIdentifier (Size = -1; Prec = 0; Scale = 0) [92190315-1107-4848-94b3-dd9badf4465b]
-- @p1: Input VarBinary (Size = -1; Prec = 0; Scale = 0) [SqlBinary(24064)]
-- @p2: Input DateTime2 (Size = -1; Prec = 0; Scale = 0) [10/26/2010 1:54:55 PM]
-- @p3: Input DateTime2 (Size = -1; Prec = 0; Scale = 0) [10/26/2010 1:54:55 PM]
-- @p4: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [This is my new file]
-- @p5: Input Int (Size = -1; Prec = 0; Scale = 0) [3]
-- @p6: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [MySecondTestDoc.doc]
-- @p7: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [My Other Test Document]
-- @p8: Input DateTime2 (Size = -1; Prec = 0; Scale = 0) []
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

INSERT INTO [dbo].[UserFiles]([fileID], [userID], [rightsID])
VALUES (@p0, @p1, @p2)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input UniqueIdentifier (Size = -1; Prec = 0; Scale = 0) [92190315-1107-4848-94b3-dd9badf4465b]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [3]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

Wenn ich Server Profiler sehe es zeichnet RPC: exec sp_executesql "Good Insert Statement" Fertig

Wenn ich die SQL manuell über die Server-Manager Studio ausführen, funktioniert alles einwandfrei. Ich kann das durch die Protokollierung erfolgreich entweder tut mit SA oder mit den Anmeldeinformationen durch den Web-Service verwendet.

LINQ SubmitChanges wirft keinen Fehler though. Gibt es Gründe, warum es nicht funktioniert? Ich habe keine Insert / Update / DeleteFile Funktionen in allen Teilklassen überlastet.

Ändern von anderen Tabellen scheinen zu funktionieren aber. Ich frage mich, ob es mit der FILESTREAM-Spalte zu tun hat.

Meine Verbindungszeichenfolge ist:

Data Source=IP;Initial Catalog=MyDB;User ID=myLogin;Password=myPswd

Wenn ich manuell den Datensatz in der Tabelle (Tabelle FILESTREAM) setzen, kann ich diese Daten lesen just fine.

Schließlich habe ich FILESTREAM konfiguriert für Transact-SQL-Zugriff und nicht für Datei-I / O-Streaming-Zugriff. Von wie ich es verstand, sah ich keine Notwendigkeit, einen freigegebenen Ordner auf die Datenstelle zu haben. Ich wollte alles über die Datenbank gehen, um die Filestream-Daten zu erhalten.

Danke!

FIXED

Ich habe den folgenden Code:

public TransactionScope CreateTransactionScope(TransactionScopeOption scope, IsolationLevel level)
{
  var transactionOptions = new TransactionOptions();
  transactionOptions.IsolationLevel = level;
  transactionOptions.Timeout = TimeSpan.MaxValue;
  return new TransactionScope(scope, transactionOptions);
}
public TransactionScope CreateTransactionScope(TransactionScopeOption scope)
{
  return CreateTransactionScope(scope, IsolationLevel.ReadCommitted);
}

und meine SubmitChanges sah aus wie:

using (var ts = db.CreateTransactionScope(TransactionScopeOption.RequiresNew, IsolationLevel.ReadUncommitted))
    {
      db.SubmitChanges(ConflictMode.FailOnFirstConflict);
    }

anyone? jemand? Ich habe vergessen, die vollständige Erklärung ... lol. Ich dachte, dass ich vielleicht mehr im SubmitChanges Bereich hinzufügen und könnte rückgängig zu machen möge, so dass ich die Anweisung using dort gelassen, aber nie meine Änderungen ... Danke an alle begehen!

War es hilfreich?

Lösung

ich habe vergessen, die ausgefüllte Anweisung innerhalb der Transaktion

Andere Tipps

Vor etwa einem Monat ich einen Einsatz Abfrage von Code an den SQL-Server gesendet. Und sah absolut nichts passieren. Es wurden keine Datensätze eingefügt und keine Fehler aufgezeichnet. Profiler zeigte die Abfrage vorgelegt. Wenn ich die Abfrage ausgeführt, dass Profiler hatte, dann hat es funktioniert. Absolut boggled meinen Kopf.

Dann auf eine Lerche, überprüfte ich auf die Sicherheit. Und siehe da der Benutzer die Website ausgeführt wurde unter nicht über Berechtigungen den Einsatz durchzuführen. Nach der Sicherheit zu aktualisieren, begann alles ganz gut funktioniert.

Schräge Sache ist, dass absolut kein Fehler ausgelöst wurde. Als ich versuchte, das Problem zu reproduzieren, begann ich Sicherheitsfehler bekommen. I figured SQL Server gerade beschlossen, nicht an diesem Tag zu melden.

Sie können dort beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top