Entity Framework Code First 迁移添加了我的模型中不存在的字段
Entity Framework Code First migrations adds a field not present in my model
我有以下型号:
[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);
问题的发生只是因为我有两个引用table,如果我只添加一个,问题就不会发生。
在这种情况下,您还必须在 InversePropertyAttribute
的帮助下配置另一个端点,即 ApplicationUser
class:
public class ApplicationUser
{
//other properties...
[InverseProperty("UsuarioAsignado")]
public virtual ICollection<UsuarioHasPermisoEnUsuario> UsuarioAsignados {get;set;}
[InverseProperty("Usuario")]
public virtual ICollection<UsuarioHasPermisoEnUsuario> Usuarios {get;set;}
}
我有以下型号:
[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);
问题的发生只是因为我有两个引用table,如果我只添加一个,问题就不会发生。
在这种情况下,您还必须在 InversePropertyAttribute
的帮助下配置另一个端点,即 ApplicationUser
class:
public class ApplicationUser
{
//other properties...
[InverseProperty("UsuarioAsignado")]
public virtual ICollection<UsuarioHasPermisoEnUsuario> UsuarioAsignados {get;set;}
[InverseProperty("Usuario")]
public virtual ICollection<UsuarioHasPermisoEnUsuario> Usuarios {get;set;}
}