0

지금까지 완벽하게 작동하는 코드 우선 접근 방식을 사용하여 데이터베이스를 만들었습니다. 그러나 나는 EF6가 어떻게 든 짐작할 수없는 사소한 문제가 있거나 잘못하고있다.EF6 코드 동일한 엔터티를 사용하여 2 개의 속성을 가질 때 처음 혼란이 생깁니다.

I 클래스 유형 Person의 속성 CreatedBy 입력 ICollection<Person>의 또 다른 특성 Members을 가지고 Project있다;

public virtual ICollection<Project> Projects { get; set; } 

이 두 클래스 간 다 대다 관계가있을 예정되어 EF6에게 :

public class Project 
{ 
    // ... 
    public Person CreatedBy { get; set; } 
    public virtual ICollection<Person> Members { get; set; } 
} 

클래스 Person에서 나는 다음과 같은 속성을 추가했습니다. 나는 Project 클래스에서 주석 CreatedBy와 비주얼 스튜디오에서 Add-MigrationUpdate-Database를 실행하면

, 무슨 일어날 것은 Project <-> Person 테이블이 데이터베이스에 작성 될 것입니다.

내가 다음 CreatedBy 속성을 주석을 해제하고 동일한 스크립트를 다시 Project <-> Person 테이블이 삭제됩니다 모두 ProjectPerson 테이블이 1 대 1의 관계로 변경 둘 사이에 외래 키와 함께 새 열을 얻을를 실행합니다.

어떻게 코드 우선을 사용하여 내 ProjectPerson 클래스 사이의 관계를 설정하면 1 대 다수 (1 명은 많은 프로젝트를 생성 할 수 있습니다) 및 다 대다 (많은 사람을 많은 프로젝트에 추가 할 수 있습니까?)

+0

도움이되는지 확인하려면 http://stackoverflow.com/questions/23763538/ef6-one-to-many-and-many-to-one-between-same-entities를 참조하십시오. – Mike

답변

3

당신은 구성 유창함 API를 사용할 필요를 엔티티 :

class ProjectConfiguration : EntityTypeConfiguration<Project> 
    { 
     public ProjectConfiguration() 
     { 
      HasRequired(e => e.CreatedBy).WithMany(); // one-to-many 
      HasMany(e => e.Members).WithMany(); //many-to-many 
     } 
    } 

    public class Context : DbContext 
    { 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Configurations.Add(new ProjectConfiguration()); 
     } 
    } 
유창 API에 대한

더 자세히 다음 유창함 API와 관계를 구성 http://msdn.microsoft.com/en-us/data/jj591617.aspx

: http://msdn.microsoft.com/en-us/data/jj591620

+0

그래서 이것을 구현하고'Add-Migration'을 실행하면 EF는이 초기 설정을 1 대 1 관계로 변경하지 않을 것입니다. – diceler

+0

예. 그것은 모두 일대일 관계를 바꿀 것인지 여부에 달려 있습니다. 일대일 관계를 바꾸고 싶지 않다면, 그 대답에서 설명한 구성을 사용하십시오. 당신이 다음 일대일 관계를 변경하려면 : HasRequired (예 => e.CreatedBy) .WithRequiredPrincipal() 또는 HasRequired (예 => e.CreatedBy) .WithRequiredDependent를() -이 구성 일대일 관계이다 . – sribin

0

나는 이것을 확인,하지만하지 않은 당신이 지정하고있는 경우 명시 적 외래 키 당신, 두 개의 서로 다른 관계를 구별하기에 충분합니다 작성자 :

// make nullable if CreatedBy is not required 
[ForeignKey("CreatedBy")] 
public int CreatedById { get; set; } 
public Person CreatedBy { get; set; }