每个表中的列名必须唯一。表“ UserLogins”中的列名“ department_Id”已多次指定

时间:2019-03-08 16:52:31

标签: c# entity-framework ef-code-first ef-migrations ef-code-first-mapping

class UserLogin
{
    [Key]
    public int id { get; set; }

    [StringLength(50)]
    public string userName { get; set; }

    [StringLength(20)]
    public string password { get; set; }

    public virtual Modules module { get; set; }

    public virtual Company company { get; set; }

    public virtual Department department { get; set; }
}
class Department
{
    [Key]
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string DeptName { get; set; }

    [Required]
    [StringLength(50)]
    public string DeptGroup { get; set; }

    [Required]
    [StringLength(15)]
    public string userComputer { get; set; }

    [Required]
    public DateTime enterDate { get; set; }

    [Required]
    public virtual UserLogin createdBy { get; set; }

    public DateTime updateDate { get; set; }

    public virtual UserLogin updatedBy { get; set; }

    public virtual ICollection<UserLogin> userLogin { get; set; }

这些是我在C#实体框架的代码优先方法中使用的2个表配置。 但是在创建迁移代码之后,将创建以下配置

CreateTable(
            "dbo.UserLogins",
            c => new
                {
                    id = c.Int(nullable: false, identity: true),
                    userName = c.String(maxLength: 50),
                    password = c.String(maxLength: 20),
                    company_id = c.Int(),
                    Department_Id = c.Int(),
                    department_Id = c.Int(),
                    module_id = c.Int(),
                })
            .PrimaryKey(t => t.id)
            .ForeignKey("dbo.Companies", t => t.company_id)
            .ForeignKey("dbo.Departments", t => t.Department_Id)
            .ForeignKey("dbo.Departments", t => t.department_Id)
            .ForeignKey("dbo.Modules", t => t.module_id)
            .Index(t => t.company_id)
            .Index(t => t.Department_Id)
            .Index(t => t.department_Id)
            .Index(t => t.module_id);

        CreateTable(
            "dbo.Departments",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    DeptName = c.String(nullable: false, maxLength: 50),
                    DeptGroup = c.String(nullable: false, maxLength: 50),
                    userComputer = c.String(nullable: false, maxLength: 15),
                    enterDate = c.DateTime(nullable: false),
                    updateDate = c.DateTime(nullable: false),
                    createdBy_id = c.Int(nullable: false),
                    updatedBy_id = c.Int(nullable: false),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.UserLogins", t => t.createdBy_id, cascadeDelete: true)
            .ForeignKey("dbo.UserLogins", t => t.updatedBy_id, cascadeDelete: true)
            .Index(t => t.createdBy_id)
            .Index(t => t.updatedBy_id);

并且出现以下错误消息:每个表中的列名必须唯一。表“ UserLogins”中的列名“ department_Id”已多次指定。 请帮我找出错误,因为我是c#Entity Framework中代码优先方法的新手?

3 个答案:

答案 0 :(得分:0)

userlogin表创建代码中有两个department_id删除1行 Department_id = c.int()

答案 1 :(得分:0)

EF为viewInsets.bottom添加department_id,为UserLogin.department添加Department_Id。由于Department.userLogin中额外的UserLogin属性,似乎框架无法理解这些实体是通过这些属性连接的。因此,只需借助Department

帮助EF将它们连接起来
InverseProperty

答案 2 :(得分:0)

使用一个对类有意义并独立存在的ID。 ID 的ID不是唯一的。

对ID使用以下内容:

public int LoginID { get; set; }
public int DeptID { get; set; }

这样,您的迁移问题就会减少。