首页 > 解决方案 > EF Core 外键配置

问题描述

尝试设置外键配置时出现问题。

从 'OrderStatus.Order' 到 'Order.OrderStatuses' 与外键属性 {'OrderId' : int} 的关系不能以主键 {'Id' : int, 'TransactionId' : int} 为目标,因为它不兼容。为此关系配置一个主键或一组兼容的外键属性。
系统异常;System.InvalidOperationException

Order.OrderIdOrderStatus.TransactionId是需要加入的。

模型类:

public class Order
{
    public int OrderId { get; set; }
    public int CustomerId { get; set; }
    public ICollection<OrderStatus> OrderStatuses { get; set; }
}

public class OrderStatus
{
    public int Id { get; set; }
    public int TransactionId { get; set; }
    public string Status { get; set; }
    public DateTime Date { get; set; }
}

上下文配置:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Order>()
                .ToTable("OrdersTable")
                .HasKey(o => new { o.OrderId, o.CustomerId });

    modelBuilder.Entity<Order>()
                .HasMany(o => o.OrderStatuses)
                .WithOne(o => o.Order)
                .HasForeignKey(o => o.OrderId);

    modelBuilder.Entity<OrderStatus>()
                .ToTable("OrderStatusTable")
                .HasKey(os => os.TransactionId);
}

标签: asp.net-corefluentef-core-2.0

解决方案


推荐阅读