2012-02-28 4 views
1

Я использую этот tutorial от microsoft для создания отношения «один к одному» с 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; } 
} 
Смежные вопросы