2012-02-28 331 views
1

我正在使用Microsoft的此tutorial與EF4.1建立一對一的關係在教師和OfficeAssignment之間。這是一種魅力。多個「1到0..1」關係模型

但現在我想每個教練喜歡在此添加主頁(1至零或-1):

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

我加入了家庭模式完全相同的方式作爲OfficeAssignment(就像上面的教程一樣),但是當我嘗試爲這些模型添加控制器時,出現錯誤「已經添加了一個同名的項目」。

所以我的模型設置不正確。 下面有什麼問題? 如何在EF4.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; } 
}