c# - HasAlternateKey 允许重复输入
问题描述
我在我的DbContext
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Order>().HasAlternateKey(o => o.OrderNumber);
base.OnModelCreating(builder);
}
但是当我插入几个订单时,每次都使用相同的代码:
var order = new Order()
{
OrderNumber = "12345",
OrderParts = new List<OrderPartQuantity>()
{
new OrderPartQuantity()
{
Part = _context.Parts.FirstOrDefault(p => p.BellNumber == "100123"),
Quantity = 10
}
}
};
_context.Orders.Add(Order);
_context.SaveChanges();
每次都会插入订单,即使它们都具有相同的OrderNumber
值。
我是否理解错误,或者我错过了什么?我正在努力寻找对此的解释
解决方案
所以看起来调用HasAlternateKey
实际上OnModelBuilding
需要在应用之前进行新的数据库迁移。
打电话后
Add-Migration TestHasAlternateKeys
此迁移已创建
public partial class HasAlternateKeyTest : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "OrderNumber",
table: "Orders",
nullable: false,
oldClrType: typeof(string),
oldNullable: true);
migrationBuilder.AddUniqueConstraint(
name: "AK_Orders_OrderNumber",
table: "Orders",
column: "OrderNumber");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropUniqueConstraint(
name: "AK_Orders_OrderNumber",
table: "Orders");
migrationBuilder.AlterColumn<string>(
name: "OrderNumber",
table: "Orders",
nullable: true,
oldClrType: typeof(string));
}
}
现在,打电话后
Update-Database
我不能再复制该列
推荐阅读
- server - 在 widows server 2019 中删除 .Net 功能后,服务器管理器不可用/无法访问
- python - 在 Python 中比较列表切片的最佳方法是什么?
- oracle - SQL*Plus BREAK 的行为如何/为什么取决于列顺序?
- java - 客户端如何获取 DATABASE_URL?
- assembly - 如何防止 GCC 生成 x86_64 kmov 指令?
- amazon-web-services - 如何找到最花钱的 lambda 函数?
- lumen - 在流明应用程序中添加 Barryvdh\Debugbar 我得到了错误
- php - Cakephp 不起作用。我该如何解决这个问题
- android - 启用 Desugaring 后在发布版本中引发运行时异常
- java - 将玩家列表写入文件时出现 IndexOutOfBoundsException