Frage

Unser „user“ Modell benötigt ein kleines Profilbild auf, und ich bin mir nicht ganz sicher, wie es zu handhaben. Natürlich konnten wir speichern sie nur in einen Ordner auf der Festplatte und speichern Sie den Pfad / Dateiname in der Datenbank, aber ich denke, würde ich lieber in der DB selbst gespeichert haben.

Mein erster Gedanke war, eine Eigenschaft auf dem Modell wie diese haben:

[Property] 
public byte[] ProfilePicture
{
  get;
  set;
}

Aber es sicher fühlt sich an wie ich werde einen langen Weg zu gehen haben, um es auf diese Weise zu erhalten arbeiten -. Ein Byte-Array aus der Datenbank erhalten, das Umwandeln es dann zu einem Bild mit irgendeiner Art von Handler

Hat jemand ein gutes Tutorial gesehen, wie diese Art der Sache zu behandeln? Es scheint, als wäre es eine gemeinsame genug Forderung sein, dass ich etwas Monorail spezifische finden würde, aber bisher meine Recherchen haben gehen leer aus.

War es hilfreich?

Lösung

Über Bilder auf Datenbank oder Speichern von Dateien finden Sie in dieser Frage .

Wenn Sie es auf DB, die wichtigste Sache zu speichern entschieden ist, dass Sie nicht Rufen Sie die byte[] jedes Mal, wenn Sie Abfrage für einen Benutzer, die möglicherweise eine Menge von Daten sein könnte und ein perf Problem. Dazu müssen Sie entweder das Bild in einer anderen Tabelle gespeichert werden könnten oder die byte[] an ein anderes Unternehmen mit der gleichen Tabelle zuordnen (vorausgesetzt, der Benutzer nur ein Bild haben kann):

[ActiveRecord("users")]
public class UserWithoutPicture {
  [PrimaryKey]
  public virtual int Id {get;set;}
...
  [BelongsTo]
  public virtual UserProfilePicture ProfilePicture {get;set;}
}

[ActiveRecord("users")]
public class UserProfilePicture {
  [PrimaryKey]
  public virtual int Id {get;set;}

  [Property]
  public virtual byte[] Image {get;set;}
}

Dies würde einige flippige Verhaltensweisen haben, obwohl . Zum Beispiel für einen bestimmten Benutzer, würde die ProfilePicture nie null sein. Sie würden einfügen oder löschen UserProfilePicture nicht wirklich, da es tatsächlich der Benutzer ist, stattdessen würden Sie immer aktualisieren. Und Sie würden entstehen zusätzliche beitreten, und man muss sich bewusst sein: SELECT N + 1 . Das ist nur aus der Spitze von meinem Kopf, völlig ungetestet .

. Fazit: Bilder in einer anderen Tabelle zu speichern ist viel flexibler

Wenn Sie die Bequemlichkeit mit einem Umgang Image anstelle von rohen byte[], implementieren IUserType . Aber denken Sie daran, dass Bild ist ein IDisposable, und es wird sein sehr hart entsorgen sie zur richtigen Zeit.

Die Implementierung einer Einschienen Controller, dass die Renditen ein Bild ist recht einfach ... nur Gebrauch [ARFetch] die UserProfilePicture von id und Schreiben in den Antwortstrom mit dem entsprechenden Content-Typ zu erhalten.

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