首页 > 解决方案 > 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值。

我是否理解错误,或者我错过了什么?我正在努力寻找对此的解释

标签: c#asp.net-coreentity-framework-core

解决方案


所以看起来调用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

我不能再复制该列


推荐阅读