我在個人ASP.NET MVC 3項目上使用EF代碼優先(4.3.1),具有非常簡單的領域模型,而且我幾乎處於EF將按照我希望的方式生成數據庫模式。實體框架代碼優先 - 虛擬財產列命名
域模型有兩個類:Painting
和Gallery
。每個Painting
屬於一個單獨的Gallery
,並且Gallery
有兩個虛擬屬性指向Painting
:一個用於指示該繪畫是封面圖片,還有一個是主頁上顯示的Slider圖片。
這些類如下。我已經刪除了一些註釋和不相關的屬性以使其可讀。
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; }
}
和繪畫:
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; }
}
它產生兩個類及其關係的正確DB模式,唯一的小問題,我是,我還沒有找到一種方法來控制列名它給出Gallery
表中的Cover
和Slider
的虛擬屬性。
它會將它們命名爲Cover_PaintingId
和Slider_PaintingId
。
我試過使用[Column("columnNameHere")]
屬性,但這根本不影響它。正如「我輸入了一個非相關的單詞並且它沒有出現在模式中」。
我想給它命名CoverPaintingId
,沒有下劃線。
任何幫助,非常感謝。謝謝
我曾嘗試過,理查德,但我收到以下錯誤: 引入FOREIGN KEY約束'FK_Galleries_Paintings_CoverPaintingId'表'圖庫'可能會導致週期或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 無法創建約束。查看以前的錯誤。 – GR7 2012-08-07 18:38:42
啊,是的,忘了你會得到多重關係。更新了答案以解釋如何解決這個問題。 – Richard 2012-08-07 18:48:42
理查德。取得了一些進展,謝謝,但現在我收到以下錯誤:'ap.Models.Gallery'類型的屬性'封面'上的ForeignKeyAttribute無效。在依賴類型「ap.Models.Painting」上未找到外鍵名'CoverPaintingId'。名稱值應該是逗號分隔的外鍵屬性名稱列表。 從錯誤說,我明白我必須在繪畫上創建一個CoverPaintingId屬性?這不是我想要的,因爲我只想將已經在Gallery上創建的列命名爲「CoverPaintingId」而不是「Cover_PaintingId」 – GR7 2012-08-07 18:56:10