несколько моделей отношений "от 1 до 0..1" - PullRequest
1 голос
/ 28 февраля 2012

Я использую это учебное пособие от Microsoft для создания отношения один-ноль-к-одному с EF4.1 между инструктором и OfficeAssignment.Это работает как шарм.

Но теперь я хочу добавить Дом для каждого Инструктора (от 1 до нуля или 1), как это:

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

Я добавил модель Home точно так же, как 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);
}

1 Ответ

2 голосов
/ 21 мая 2012

Не похоже, что 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; }
}
...