multiple “1 to 0..1” relationship models

[亡魂溺海] 提交于 2019-12-08 09:31:11

问题


I am using this tutorial from microsoft to create a one-zero-to-one relationship with EF4.1 Between an Instructor and OfficeAssignment. This is working like a charm.

But now I want to add a Home for each Instructor (1 to zero-or-1) like in this:

I added the Home model exactly the same way as the OfficeAssignment (like in the tutorial above), but when I try to add controllers for these model, I get the error "An item with the same name has already been added".

So my model is set up incorrectly. What is wrong with the below? How do I create multiple one-to-zero-to-one relationships in 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:


Doesn't look like EF supports real 1 to 0..1 relationship. You need a foreign key. And add the optional (int?) into the main model.

So I did this as follow, and it works like a charm.

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; }
}


来源:https://stackoverflow.com/questions/9479519/multiple-1-to-0-1-relationship-models

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!