Sto utilizzando EF Code First (4.3.1) su un progetto ASP.NET MVC 3 personale, con un modello di dominio molto semplice, e sono quasi al punto in cui EF genererà lo schema DB nel modo in cui lo voglio.Primo codice struttura entità - Denominazione colonna proprietà virtuale
Il modello di dominio ha due classi: Painting
e Gallery
. Ogni Painting
appartiene a un singolo Gallery
e lo Gallery
ha due proprietà virtuali che puntano a Painting
: uno per indicare quale del dipinto è l'immagine di copertina e uno per quale dei dipinti è l'immagine del dispositivo di scorrimento visualizzata nella pagina iniziale.
Le classi sono le seguenti. Ho rimosso alcune annotazioni e proprietà irrilevanti per renderlo leggibile.
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; }
}
e pittura:
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; }
}
Esso genera uno schema db corretta per entrambe le classi e le sue relazioni, l'unico piccolo problema che ho è che non ho trovato un modo per controllare i nomi delle colonne dà alle proprietà virtuali di Cover
e Slider
nella tabella Gallery
.
Li chiamerà Cover_PaintingId
e Slider_PaintingId
.
Ho provato a utilizzare l'attributo [Column("columnNameHere")]
, ma questo non ha alcun effetto. Come in "Ho digitato una certa parola non correlata e non si è presentata nello schema".
Mi piacerebbe chiamarlo CoverPaintingId
, senza il carattere di sottolineatura.
Qualsiasi aiuto è molto apprezzato. Grazie
Ho provato anche a Richard, ma ho ricevuto il seguente errore: L'introduzione del vincolo FOREIGN KEY "FK_Galleries_Paintings_CoverPaintingId" nella tabella "Gallerie" può causare cicli o più percorsi a cascata. Specificare ON DELETE NO ACTION o ON UPDATE NO ACTION o modificare altri vincoli FOREIGN KEY. Impossibile creare il vincolo. Vedi errori precedenti. – GR7
Ah sì, ho dimenticato che avresti ottenuto con più relazioni. Aggiornato la risposta per spiegare come aggirare il problema. – Richard
Richard. Fatto qualche progresso, grazie, ma ora sto ricevendo il seguente errore: Il ForeignKeyAttribute sulla proprietà 'Cover' sul tipo 'ap.Models.Gallery' non è valido. Il nome della chiave esterna "CoverPaintingId" non è stato trovato nel tipo dipendente "ap.Models.Painting". Il valore Nome dovrebbe essere un elenco separato da virgole di nomi di proprietà di chiave esterna. E da quello che dice l'errore, capisco che dovrei creare una proprietà CoverPaintingId su Painting? Non sarebbe quello che volevo, dal momento che voglio solo nominare la colonna che è già stata creata su Gallery come "CoverPaintingId" invece di "Cover_PaintingId" – GR7