Код Entity Framework Первые миграции добавляет поле, отсутствующее в моей модели - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующая модель:

[Table("UsuariosHasPermisosEnUsuarios")]
public class UsuarioHasPermisoEnUsuario
{
    [Key]
    public int Id { get; set; }

    [Index("IX_UHPEU_Unique", 1, IsUnique = true)]
    public int Permiso_Id { get; set; }

    [Index("IX_UHPEU_Unique", 2, IsUnique = true)]
    public string UsuarioAsignado_Id { get; set; }

    [Index("IX_UHPEU_Unique", 3, IsUnique = true)]
    public string Usuario_Id { get; set; }

    [ForeignKey("Permiso_Id")]
    public virtual Permiso Permiso { get; set; }

    [ForeignKey("UsuarioAsignado_Id")]
    public virtual ApplicationUser UsuarioAsignado { get; set; }

    [ForeignKey("Usuario_Id")]
    public virtual ApplicationUser Usuario { get; set; }
}

Мне нужно иметь две ссылки ApplicationUser, поэтому у меня есть UsuarioAsignado и Usuario, проблема заключается в том, что при выполнении команды Add-Migration MigrationName Entity Framework генерирует третьюссылка и внешний ключ ApplicationUser:

CreateTable(
            "dbo.UsuariosHasPermisosEnUsuarios",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Permiso_Id = c.Int(nullable: false),
                    UsuarioAsignado_Id = c.String(maxLength: 128),
                    Usuario_Id = c.String(maxLength: 128),
                    ApplicationUser_Id = c.String(maxLength: 128),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.Permisos", t => t.Permiso_Id, cascadeDelete: true)
            .ForeignKey("dbo.AspNetUsers", t => t.Usuario_Id)
            .ForeignKey("dbo.AspNetUsers", t => t.UsuarioAsignado_Id)
            .ForeignKey("dbo.AspNetUsers", t => t.ApplicationUser_Id)
            .Index(t => new { t.Permiso_Id, t.UsuarioAsignado_Id, t.Usuario_Id }, unique: true, name: "IX_UHPEU_Unique")
            .Index(t => t.ApplicationUser_Id);

Проблема возникает только потому, что у меня есть две ссылки на эту таблицу, и если я добавлю только одну, проблема не произойдет.

1 Ответ

0 голосов
/ 27 сентября 2018

В этом случае вам также необходимо настроить другую конечную точку, т.е. класс ApplicationUser с помощью InversePropertyAttribute:

public class ApplicationUser 
{
    //other properties...

    [InverseProperty("UsuarioAsignado")]
    public virtual ICollection<UsuarioHasPermisoEnUsuario> UsuarioAsignados {get;set;}

    [InverseProperty("Usuario")]
    public virtual ICollection<UsuarioHasPermisoEnUsuario> Usuarios {get;set;}
}
...