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

问题描述 投票:2回答:1

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

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

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

但LastName字段曾经使用过。

HumanCustomer Class:

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");
        }
c# asp.net-core migration entity-framework-core
1个回答
0
投票

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

Add-Migration migrationName –IgnoreChanges

虽然,正如@Ahmad评论的那样,EF Core不支持-IgnoreChanges,因此,你可以做的一件事是,如果你不想手动删除表中的列,你可以注释掉Add LastName中的Up代码方法。

© www.soinside.com 2019 - 2024. All rights reserved.