如何在Entity Framework Core的复合键中使用常量配置关系?

public class Order
{
    public int Id { get; set; }
    public string Type { get; set; }
}

Order具有组合键(Id,Type)

public class SalesOrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
}

SalesOrderItem具有密钥Id

我想配置SalesOrderItemOrder之间的关系。 SalesOrderItem没有可用于创建该关系的组合键的OrderType列。 OrderType在与SAL一起使用时始终为SalesOrderItem

我试图通过在外键部分设置常量来配置关系:

protected override void OnmodelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Order>()
        .HasKey(o => new { o.Id,o.Type });

    modelBuilder
        .Entity<SalesOrderItem>()
        .HasKey(s => s.Id);

    modelBuilder
        .Entity<Order>()
        .HasMany<SalesOrderItem>()
        .WithOne(salesOrderItem => salesOrderItem.Order)
        .HasForeignKey(salesOrderItem => new {salesOrderItem.OrderId,Type = "SAL"});
}

有效。

我该怎么办?

yk7732637 回答:如何在Entity Framework Core的复合键中使用常量配置关系?

您不能使用常量作为参考,而是可以派生另一个表:

public class SalesOrder : Order
{
}

public class SalesOrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public SalesOrder Order { get; set; }
}

并像这样配置您的销售订单

modelBuilder.Entity<Order>()
    .HasDiscriminator(t => t.Type)
    .HasValue<SalesOrder>("SAL");

然后仅用外键映射到销售订单

modelBuilder
    .Entity<Order>()
    .HasMany<SalesOrderItem>()
    .WithOne(salesOrderItem => salesOrderItem.Order)
    .HasPrincipalKey(salesOrderItem => salesOrderItem.OrderId);

编辑:由于它具有使用主键的复合索引,因此@Jogge注释为该选项。

本文链接:https://www.f2er.com/3118882.html

大家都在问