4 Stimmen

linq2sql Probleme beim Speichern von Bildern

Ich habe ein Objekt, das eine Eigenschaft hat:

[Column]
public Binary Image { get; set; }

Wenn das Objekt das erste Mal gespeichert wird, ist alles in Ordnung, aber wenn es geändert wird, erhalte ich eine Ausnahme bei SubmitChanges:

Die Datentypen image und varbinary(max) sind nicht kompatibel mit dem gleich-Operator.

Was könnte hier das Problem sein?

2voto

D. Patrick Punkte 2675

Erhalten Sie die Ausnahme ""? Das Problem ist, dass linq2sql prüfen will, ob die Spalte geändert werden soll, bevor sie tatsächlich geändert wird. Normalerweise kümmert mich das nicht so sehr und ich bin vollkommen zufrieden damit, die gesamte Zeile zu aktualisieren, also setze ich die UpdateCheck = UpdateCheck.Never benannten Parameter in meinem ColumnAttributes . D.h.,

[Column(UpdateCheck = UpdateCheck.Never)]

Wenn ich den Artikel dann speichern möchte, mache ich einfach Folgendes:

Table<TEntity> da = MyDataContext.Context.GetTable<TEntity>();

if (entity.Id > 0)
    da.Attach(entity, true);

else
    da.InsertOnSubmit(entity);

da.Context.SubmitChanges();

0voto

Mark Seemann Punkte 216836

Ich glaube, Sie stoßen auf den Standard Optimistische Zustimmung Verhalten in LINQ to SQL (und ich glaube, dass LINQ to Entities auf dieselbe Weise funktioniert).

Wenn nicht anders angegeben, wird kurz vor der Aktualisierung einer Zeile eine SELECT-Anweisung mit den vorherigen Werten aller Spalten in der Zeile ausgeführt, um festzustellen, ob jemand anderes sie geändert hat, während Sie sie im Speicher hatten.

Es klingt jedoch so, als wüsste es nicht, wie man zwei Binary-Instanzen vergleicht.

Wenn dies der Fall ist, haben Sie zwei Möglichkeiten:

  • Verwenden Sie eine explizitere Version der optimistischen Gleichzeitigkeit, indem Sie die Zeilenversion auf der Grundlage einer bestimmten Zeitstempelzeile identifizieren ( bevorzugt )
  • Optimistische Gleichzeitigkeit deaktivieren

Hier ist die Dokumentation für optimistische Gleichzeitigkeit für LINQ to SQL.

0voto

Alex Punkte 3009

Treten Sie einen Moment zurück - wie vergleichen Sie diese Variablen?

Berechnen Sie einen Hash-Wert für die Bilder? Der Vergleich der Hashes ist viel besser als der Vergleich der Bilder Byte für Byte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X