我在个人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