asp.net-core - EF Core 外键配置
问题描述
尝试设置外键配置时出现问题。
从 'OrderStatus.Order' 到 'Order.OrderStatuses' 与外键属性 {'OrderId' : int} 的关系不能以主键 {'Id' : int, 'TransactionId' : int} 为目标,因为它不兼容。为此关系配置一个主键或一组兼容的外键属性。
系统异常;System.InvalidOperationException
Order.OrderId
和OrderStatus.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);
}
解决方案
推荐阅读
- laravel - 在这种情况下,每个自定义字段都需要有一个唯一的名称吗?
- visual-studio-2013 - 从 Visual Studio 部署 Web 应用程序不成功
- javascript - 如何在vue js html中的函数中获取v-for的索引?
- linux - FileSystemWatcher 和 rsync
- android - 在我的应用程序中出现构建错误
- javascript - 如何在 Safari 和 Edge 中存储 cookie 变量?
- objective-c - 自定义 UITableViewCell 目标 c
- java - 如何从实现类模拟对象
- javascript - 使用 pushState 为 Backbone SPA 配置 node express
- terminal - 批量重命名代码需要修改