1

부모 및 자식 열을 Element_ID 및 Element_ID1 대신 의미가있는 이름으로 지정하려고합니다.자체 참조 가상 속성의 열 이름 지정

요소 테이블은 문제없이 생성되지만 두 번째 테이블은 열 이름을 업데이트하려고합니다.

부모 속성 감속 위에 [Column("ParentID")] 속성을 추가하려고했지만 생성 된 테이블에 영향을주지 않습니다.

엔티티 클래스 마이그레이션

CreateTable(
    "dbo.ElementElements", 
    c => new 
     { 
      Element_ID = c.Guid(nullable: false), 
      Element_ID1 = c.Guid(nullable: false), 
     }) 
    .PrimaryKey(t => new { t.Element_ID, t.Element_ID1 }) 
    .ForeignKey("dbo.Elements", t => t.Element_ID) 
    .ForeignKey("dbo.Elements", t => t.Element_ID1) 
    .Index(t => t.Element_ID) 
    .Index(t => t.Element_ID1); 

내가 원하는 나는 그런

public class Hierarchy 
{ 
    public Guid ID { get; set; } 
    public virtual Guid ParentID { get; set; } 
    public virtual Element Parent { get; set; } 
    public virtual Guid ChildID { get; set; } 
    public virtual Element Child { get; set; } 
} 
로 두 번째 개체를 사용하는 경우 내가 두 번째 테이블 출력을 할 수 생성 된

public class Element 
{ 
    public Guid ID { get; set; } 
    public string Title { get; set; } 
    public int Status { get; set; }  

    public virtual List<Element> Parent { get; set; } 
    public virtual List<Element> Child { get; set; } 
} 

다음 생성 스크립트를 생성했습니다

CreateTable(
    "dbo.Hierarchies", 
    c => new 
     { 
      ID = c.Guid(nullable: false), 
      ParentID = c.Guid(nullable: false), 
      ChildID = c.Guid(nullable: false), 
     }) 
    .PrimaryKey(t => t.ID) 
    .ForeignKey("dbo.Elements", t => t.ParentID) 
    .ForeignKey("dbo.Elements", t => t.ChildID) 
    .Index(t => t.ParentID) 
    .Index(t => t.ChildID); 

그래서 하나의 엔티티 클래스로 원하는 열 이름을 사용하여 두 번째 테이블을 생성 할 수 있습니까? 내가 제대로 질문을 이해한다면

답변

2

당신은 유창함 API와 일반 대다 매핑이 ​​필요합니다

modelBuilder.Entity<Element>() 
    .HasMany(e => e.Parent) 
    .WithMany(e => e.Child) 
    .Map(m => { 
     m.ToTable("ElementMap"); // name of the link table 
     m.MapLeftKey("ParentID"); 
     m.MapRightKey("ChildID"); 
    }); 

내가 생성 된 마이그레이션이 매핑을 존중하고 제공된 테이블 및 열을 사용하는 것으로 기대 이름.

+0

내가 원했던 바로 고마워요, 고마워!. 부가 메모에서 ElementMap 테이블에 추가 속성을 추가하는 방법이 있습니까? 마찬가지로 요소 엔터티에 부모/자식 공개 virutal 목록을 가지고뿐만 아니라 위치 속성을 포함합니까? – Jerry

+1

@ Jarek : 아니요. 맵/조인 테이블에 추가 속성을 원하면 더 이상 다 대다 관계를 사용할 수 없습니다. 대신 조인 테이블을 추가 엔터티로 노출 한 다음 두 개의 일대 다 관계를 만들어야합니다. 여기에 예제가 있습니다 : http://stackoverflow.com/a/7053393/270591 – Slauma

+0

고마워요, 그것은 제가 기대했던 것과 같습니다. 내 원래의 질문에 언급 된 문제는 관계에 대한 더 많은 정보가 필요함을 진화 시켰지만, 당신의 솔루션은 미래에 확실히 도움이 될 것입니다. 이 링크를 가져 주셔서 감사 드리며 다음 단계에 대해 알려 드리겠습니다. – Jerry