更新我的模型并添加数据注释后。
然后我执行了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");
}
该错误清楚地表明您的表中已经有一个名为LastName
的列,并且无法应用迁移来添加具有相同名称的新列。
要么转到数据库管理系统并手动删除列,要么如果您刚刚切换到代码优先,并且在下次迁移中您想要忽略现有架构,则删除迁移文件并使用-IgnoreChanges
标志创建新文件:
Add-Migration migrationName –IgnoreChanges
虽然,正如@Ahmad评论的那样,EF Core不支持-IgnoreChanges
,因此,你可以做的一件事是,如果你不想手动删除表中的列,你可以注释掉Add LastName
中的Up
代码方法。