2012-02-28 2 views
1

Microsoft에서이 tutorial을 사용하여 강사와 OfficeAssignment간에 EF4.1과 one-zero-to-one 관계를 만듭니다. 이것은 매력처럼 작동합니다.여러 "1 - 0..1"관계 모델

는하지만 지금은이처럼 (1 제로 또는-1) 각 강사의 홈을 추가 할 :

http://i.stack.imgur.com/ZmYur.png

나는 OfficeAssignment 정확히 같은 방식으로 홈 모델을 추가 (위의 튜토리얼에서와 같이),하지만이 모델에 대한 컨트롤러를 추가하려고하면 "같은 이름의 항목이 이미 추가되었습니다"라는 오류가 발생합니다.

그래서 내 모델이 잘못 설정되었습니다. 아래의 내용은 무엇입니까? EF4.1에서 1 대 1 대 1 관계를 여러 개 만드는 방법은 무엇입니까?

public class Instructor 
{ 
    public Int32 InstructorID { get; set; } 
    public string LastName { get; set; } 
    public string FirstMidName { get; set; } 
    public virtual OfficeAssignment OfficeAssignment { get; set; } 
    public virtual Home Home { get; set; } 
} 

public class OfficeAssignment 
{ 
    [Key] 
    public int InstructorID { get; set; } 
    public string Location { get; set; } 
    public virtual Instructor Instructor { get; set; } 
} 

public class Home 
{ 
    [Key] 
    public int InstructorID { get; set; } 
    public string Location { get; set; } 
    public virtual Instructor Instructor { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<OfficeAssignment> OfficeAssignments { get; set; } 
    public DbSet<Instructor> Instructors { get; set; } 
    public DbSet<Home> Homes { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
      modelBuilder.Entity<Instructor>() 
      .HasOptional(p => p.OfficeAssignment) 
      .WithRequired(p => p.Instructor); 
      modelBuilder.Entity<Instructor>() 
      .HasOptional(p => p.Home).WithRequired(p => p.Instructor); 
} 

답변

2

EF는 실제 1 - 0..1 관계를 지원하지 않습니다. 외래 키가 필요합니다. 그리고 옵션 (int?)을 주 모델에 추가하십시오.

그래서 나는 이것을 다음과 같이했으며, 그것은 매력처럼 작동합니다.

public class Instructor 
{ 
    public Int InstructorID { get; set; } 
    public string LastName { get; set; } 
    public string FirstMidName { get; set; } 

    public int? OfficeAssignmentID { get; set; } 
    public virtual OfficeAssignment OfficeAssignment { get; set; } 

    public int? HomeID { get; set; } 
    public virtual Home Home { get; set; } 

} 

public class OfficeAssignment 
{ 
    public int OfficeAssignmentID { get; set; } 
    public string Location { get; set; } 

} 

public class Home 
{ 
    public int HomeID { get; set; } 
    public string Location { get; set; } 
}