Миграция отношений EF "многие ко многим", по-видимому, не генерирует правильный план миграции

У меня есть два класса, которые оба ссылаются друг на друга в подходе Entity Framework, основанном на коде.

public class Owner : IAuditBase
{
    [Key]
    public int Id { get; set; }
    public string ShortCode { get; set; }
    public string Name { get; set; }
    public string CreatedBy { get; set; }
    public DateTime CreatedDate { get; set; }
    public string UpdatedBy { get; set; }
    public DateTime? UpdatedDate { get; set; }
    public List<CertificateType> CertificateTypes { get; set; }

    public List<User> OwnerUsers { get; set; }

}

public class User
{
    [Key]
    public string Email { get; set; }
    public string ChipId { get; set; }
    public string Alias { get; set; }
    public Guid ResetCodeId { get; set; }
    public string ResetCode { get; set; }
    public Owner CurrentOwner { get; set; }

    public List<Owner> UserOwners { get; set; }
}

После добавления двух списков (OwnerUsers и UserOwners) я бы ожидал, что структура сущностей добавит новую таблицу, соединяющую идентификаторы Owner и User, а это не так.

public partial class addownerstousers : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Owners", "User_Email", c => c.String(maxLength: 128));
        AddColumn("dbo.Users", "Owner_Id", c => c.Int());
        CreateIndex("dbo.Owners", "User_Email");
        CreateIndex("dbo.Users", "Owner_Id");
        AddForeignKey("dbo.Owners", "User_Email", "dbo.Users", "Email");
        AddForeignKey("dbo.Users", "Owner_Id", "dbo.Owners", "Id");
    }

    public override void Down()
    {
        DropForeignKey("dbo.Users", "Owner_Id", "dbo.Owners");
        DropForeignKey("dbo.Owners", "User_Email", "dbo.Users");
        DropIndex("dbo.Users", new[] { "Owner_Id" });
        DropIndex("dbo.Owners", new[] { "User_Email" });
        DropColumn("dbo.Users", "Owner_Id");
        DropColumn("dbo.Owners", "User_Email");
    }
}

Он добавляет только одну внешнюю клавишу к каждой таблице, в значительной степени создавая двустороннее отношение один ко многим. Я видел, как мигратор работал над этим раньше, поэтому я просто не могу понять, почему это происходит сейчас. Любая помощь высоко ценится.

1 ответ

Какую версию EF вы используете? Для свойств навигации (свойств, которые относятся к другим объектам - так же, как у вас), вы должны сделать их "виртуальными" (конечно, в зависимости от версии EF).

Для получения дополнительной информации см.: https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx

Другие вопросы по тегам