Entity Framework Code First - Virtual-Eigenschaft Der Spalte Benennung
Ich bin mit EF Code First (4.3.1) auf eine persönliche ASP.NET MVC 3-Projekt, mit eine sehr einfache domain-Modell, und ich bin fast an dem Punkt, wo EF-erzeugen des DB-Schemas die Art, wie ich es wollte.
Dem domain-Modell verfügt über zwei Klassen: Painting
und Gallery
. Jeder Painting
gehört zu einer einzigen Gallery
, und die Gallery
hat zwei virtuelle Eigenschaften zeigen auf Painting
: Ein, um anzugeben, welche der Malerei ist es das cover-Bild, und eine für die Bilder ist der Schieberegler auf der Startseite angezeigt.
Die Klassen sind wie folgt. Habe ich entfernt, einige Anmerkungen und irrelevanten Eigenschaften machen es lesbar.
public class Gallery
{
public Gallery()
{
Paintings = new List<Painting>();
}
[ScaffoldColumn(false)]
[Key]
public int GalleryId { get; set; }
public string Name { get; set; }
[ScaffoldColumn(false)]
[Column("LaCover")]
public Painting Cover { get; set; }
[ScaffoldColumn(false)]
[Column("ElSlider")]
public Painting Slider { get; set; }
[ScaffoldColumn(false)]
public virtual List<Painting> Paintings { get; set; }
}
und Malerei:
public class Painting
{
[ScaffoldColumn(false)]
[Key]
public int PaintingId { get; set; }
public string Name { get; set; }
public int GalleryId { get; set; }
[Column("GalleryId")]
[ForeignKey("GalleryId")]
[InverseProperty("Paintings")]
public virtual Gallery Gallery { get; set; }
public string Filename { get; set; }
}
Erzeugt es eine richtige db-schema für die beiden Klassen und Ihre Beziehungen, das einzige kleine Problem, das ich habe ist, dass ich noch keinen Weg gefunden, die Kontrolle der Spaltennamen gibt es auf der virtuellen Eigenschaften des Cover
und Slider
im Gallery
Tabelle.
Es nennen Sie Cover_PaintingId
und Slider_PaintingId
.
Ich habe versucht mit der [Column("columnNameHere")]
Attribut, aber das macht nicht beeinflussen Sie überhaupt. Wie in "ich tippte eine bestimmte, nicht Verwandte Wort, und es nicht zeigen, bis in das schema".
Möchte ich es nennen CoverPaintingId
, ohne Unterstrich.
Jede Hilfe wird sehr geschätzt. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den ForeignKey - Attribut können Sie die Eigenschaft definieren, die als Ihre ausländischen key-wenn Sie möchten, es existieren im Modell:
Hinweis: Sie können das Attribut entweder auf das virtuelle Eigentum auf die die foreign key - nur brauchen, um geben Sie den Namen des "anderen".
Jedoch, da haben Sie zwei Beziehungen zwischen dem gleichen Satz von Entitäten, werden Sie nicht in der Lage, dies zu tun, ohne das deaktivieren löschweitergaben auf einem oder beiden von Ihnen. Dies kann nur getan werden indem der Fluent-API Konfiguration.
Wenn Sie nicht wollen, dass die Fremdschlüssel-Eigenschaften, um es in Ihrem code-Modell, Sie können auch so konfigurieren, dass diese durch die Verwendung .Karte(...) vor .WillCascadeOnDelete(false) Teil der API anstelle von ForeignKey. Ich bevorzuge Foreign Key, aber hier ist, wie würde der code Aussehen, wenn Sie wollte, es zu tun auf diese Weise:
HasOptional
fürHasRequired
als notwendig.könnten Sie versuchen, zu verwenden [inverseproperty] Dekoration, dies zu erreichen.