아주 간단한 도메인 모델로 개인 ASP.NET MVC 3 프로젝트에서 EF Code First (4.3.1)를 사용하고 있으며 EF는 원하는대로 DB 스키마를 생성합니다.Entity Framework 코드 우선 - 가상 속성 열 이름 지정
도메인 모델에는 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 스키마를 생성, 내가 가진 유일한 작은 문제는 내가 열 이름을 제어 할 수있는 방법을 발견하지 않은 것입니다 Cover
및 Slider
의 가상 속성을 Gallery
테이블에 제공합니다.
이름은 Cover_PaintingId
및 Slider_PaintingId
입니다.
[Column("columnNameHere")]
속성을 사용해 보았지만 전혀 영향을주지 않습니다. "특정 비 관련 단어를 입력했는데 스키마에 표시되지 않았습니다."와 마찬가지입니다.
밑줄없이 CoverPaintingId
으로 지정하고 싶습니다.
도움을 주시면 대단히 감사하겠습니다. 감사합니다
그 리차드도 시도했지만 다음과 같은 오류가 발생했습니다 : '갤러리'테이블에 FOREIGN KEY 제약 조건 'FK_Galleries_Paintings_CoverPaintingId'가 도입되면 사이클 또는 여러개의 계단식 경로가 발생할 수 있습니다. NO DELETE NO ACTION 또는 UP UP NO NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오. 제약 조건을 만들 수 없습니다. 이전 오류를 참조하십시오. – GR7
아, 네가 여러 관계를 가지고있는 걸 잊어 버렸다. 이 문제를 해결하는 방법을 설명하는 답변이 업데이트되었습니다. – Richard
Richard. 진행 상황을 고맙게 생각했지만 지금 다음과 같은 오류가 발생합니다. 'ap.Models.Gallery'유형의 'Cover'속성에 대한 ForeignKeyAttribute가 유효하지 않습니다. 종속 키 유형 'ap.Models.Painting'에서 외래 키 이름 'CoverPaintingId'를 찾을 수 없습니다. Name 값은 쉼표로 구분 된 외래 키 특성 이름 목록이어야합니다. 오류 메시지에서 Painting에 CoverPaintingId 속성을 만들어야한다는 것을 이해합니다. Gallery에서 이미 작성중인 열의 이름을 "Cover_PaintingId"대신 "CoverPaintingId"로만 지정하고 싶기 때문에 원하는 것은 아닙니다. – GR7