Entity Framework Code First 迁移添加了我的模型中不存在的字段

Posted

技术标签:

【中文标题】Entity Framework Code First 迁移添加了我的模型中不存在的字段【英文标题】:Entity Framework Code First migrations adds a field not present in my model 【发布时间】:2019-02-28 07:41:23 【问题描述】:

我有以下型号:

[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实体框架生成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);

问题的出现只是因为我对该表有两个引用,如果我只添加一个,问题就不会发生。

【问题讨论】:

也许可以试试 InverseProperty docs.microsoft.com/en-us/ef/ef6/modeling/code-first/… 【参考方案1】:

在这种情况下,您还必须在InversePropertyAttribute 的帮助下配置另一个端点,即ApplicationUser 类:

public class ApplicationUser 

    //other properties...

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

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

【讨论】:

以上是关于Entity Framework Code First 迁移添加了我的模型中不存在的字段的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 5.0 Code First全面学习

Entity Framework Code First

ADO.NET Entity Framework -Code Fisrt 开篇

转:Entity Framework 5.0 Code First全面学习

Entity Framework Code First 不允许Entity直接实现接口

Entity Framework Code First 迁移 Migrations