我正在尝试在我的 ApplicationUser 和 Transactions 模型之间建立一对多关系。 ApplicationUser 使用以下附加属性扩展 IdentityUser:
public class ApplicationUser : IdentityUser
{
public ICollection<Transactions> Transactions { get; set; }
}
这是我的交易模型:
public class Transactions
{
public int Id { get; set; }
public int PhoneId { get; set; }
public Phone Phone { get; set; }
public int CustomerId { get; set; }
public Customers Customer { get; set; }
public string UserId { get; set; }
public ApplicationUser User { get; set; }
public TransactionType TransactionType { get; set; }
public DateTime TransactionDate { get; set; }
public decimal TransactionAmount { get; set; }
}
当我添加新的迁移时,除了创建新表和所有内容外,我还更改了数据库中的这些列:
migrationBuilder.AlterColumn<string>(
name: "Name",
table: "AspNetUserTokens",
type: "nvarchar(128)",
maxLength: 128,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(450)");
migrationBuilder.AlterColumn<string>(
name: "LoginProvider",
table: "AspNetUserTokens",
type: "nvarchar(128)",
maxLength: 128,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(450)");
migrationBuilder.AddColumn<string>(
name: "Discriminator",
table: "AspNetUsers",
type: "nvarchar(max)",
nullable: false,
defaultValue: "");
migrationBuilder.AlterColumn<string>(
name: "ProviderKey",
table: "AspNetUserLogins",
type: "nvarchar(128)",
maxLength: 128,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(450)");
migrationBuilder.AlterColumn<string>(
name: "LoginProvider",
table: "AspNetUserLogins",
type: "nvarchar(128)",
maxLength: 128,
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(450)");
当我尝试更新我的数据库时,我得到这个错误:
错误编号:5074,状态:1,类别:16 对象“PK_AspNetUserTokens”依赖于“名称”列。 ALTER TABLE ALTER COLUMN Name 失败,因为一个或多个对象访问此列。
我用 ChatGPT 运行它,它建议如下:
在尝试更新“名称”列之前,您需要先删除“AspNetUserTokens”表上的主键约束。以下是您可以执行此操作的步骤:...
但我感兴趣的是有没有其他风险较小的方法来解决这个问题,因为我在数据库管理方面没有那么丰富的经验。
我通过完全删除我的数据库并从头开始构建它来解决这个问题。因为我刚开始开发应用程序,所以我能够做到这一点。