2017-01-17 13 views
0

У меня есть два класса, которые ссылаются друг на друга в подходе к платформе Entity Framework.Перемещение отношений между множеством ко многим EF, похоже, не создает правильный план миграции.

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), я бы ожидать, рамки сущности, чтобы добавить новую таблицу, соединяя идентификаторы владельца и пользователя, что это не так.

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

Попробуйте добавить свободно отображение ('HasMany-WithMany'). –

+0

Это работает! Благодаря! Хотя он чувствует себя немного взломанным, я видел, как это работает, не имея необходимости определять такие вещи раньше? Также не стесняйтесь добавлять свой комментарий в качестве ответа – thsorens

ответ

0

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

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

+0

Running EF 6.1.3, виртуальный не имеет никакого значения – thsorens