Миграция отношений 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