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

时间:2019-04-20 05:20:34

标签: c# asp.net-core migration entity-framework-core

更新模型并添加数据注释后。

然后我执行了add-migration和update-database命令,并出现以下错误:

  

每个表中的列名必须唯一。中的列名“ LastName”   表'HumanCustomers'被多次指定。

但姓氏字段曾经使用过。

HumanCustomer类:

public class HumanCustomer
    {
        public int Id { get; set; }
        public int UserId { get; set; }
        [Required]
        [MinLength(2)]
        [MaxLength(20)]
        public string Name
        {
            get => Name;
            set
            {
                value.TrimAndReduce();
            }
        }
        [Required]
        [MinLength(2)]
        [MaxLength(20)]
        public string LastName
        {
            get => LastName;
            set
            {
                value = value.TrimAndReduce();
            }
        }
        [NotMapped]
        public string FullName
        {
            get { return Name + LastName; }

        }
        [Required(AllowEmptyStrings = true)]
        public int GenderId { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        [DataType(DataType.EmailAddress)]
        [EmailAddress]
        public string Email { get; set; }
        public DateTime BirthDate { get; set; }
        public int IdentityTypeId { get; set; }
        public string IdentityCode { get; set; }   
        [Required]
        [ForeignKey("UserId")]
        public virtual User User { get; set; }  
        [Required]
        [ForeignKey("IdentityTypeId")]
        public virtual IdentityType IdentityType { get; set; }
        [Required]
        [ForeignKey("GenderId")]
        public virtual Gender Gender { get; set; }
    }

和迁移:

 protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "LastName",
                table: "HumanCustomers",
                maxLength: 20,
                nullable: false,
                defaultValue: "");

            migrationBuilder.AddColumn<string>(
                name: "Name",
                table: "HumanCustomers",
                maxLength: 20,
                nullable: false,
                defaultValue: "");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "LastName",
                table: "HumanCustomers");

            migrationBuilder.DropColumn(
                name: "Name",
                table: "HumanCustomers");
        }

1 个答案:

答案 0 :(得分:0)

该错误清楚地表明您的表中已经有一个名为LastName的列,并且该迁移无法应用于添加具有相同名称的新列。
请转到数据库管理系统并手动删除该列,或者如果您刚切换到代码优先并且要在下一次迁移中忽略现有模式,则删除迁移文件并使用{{ 1}}标志:

-IgnoreChanges

但是,正如@Ahmad所评论的那样,EF Core不支持Add-Migration migrationName –IgnoreChanges ,因此,您可以做的一件事是,如果您不想手动从表中删除该列,则可以进行注释在-IgnoreChanges方法中删除Add LastName代码。