.net - EF Core 无法识别复合键
问题描述
尝试启动我的 .net 核心应用程序时出现此主键错误。我与另一个可以正常工作的实体具有完全相同的复合键结构。我错过了什么?
异常: System.InvalidOperationException:'实体类型'DispatchOrders'需要定义主键。如果您打算使用无密钥实体类型,请调用“HasNoKey()”。
主要类(都以 Id 作为键)
public class Order : BaseEntity
public class Dispatch : BaseEntity
public class BaseEntity
{
public int Id { get; set; }
public DateTime CreationDate { get; set; }
public DateTime? ModifiedDate { get; set; }
public string CreatedBy { get; set; }
public string ModifiedBy { get; set; }
}
复合键类
public class DispatchOrders
{
[ForeignKey("DispatchId")]
public int DispatchId { get; set; }
public virtual Dispatch Dispatch { get; set; }
[ForeignKey("OrderId")]
public int OrderId { get; set; }
public virtual Order Order { get; set; }
}
复合键类 fluent
public DispatchOrdersMap(EntityTypeBuilder<DispatchOrders> entityBuilder)
{
entityBuilder.HasKey(o => new
{
o.DispatchId,
o.OrderId
});
entityBuilder
.HasOne(e => e.Dispatch)
.WithOne()
.HasForeignKey<Dispatch>(e => e.Id);
entityBuilder
.HasOne(e => e.Order)
.WithOne()
.HasForeignKey<Order>(e => e.Id);
}
桌子
CREATE TABLE [dbo].[DispatchOrders](
[DispatchId] [int] NOT NULL,
[OrderId] [int] NOT NULL,
CONSTRAINT [PK_DispatchOrder] PRIMARY KEY CLUSTERED
(
[DispatchId] ASC,
[OrderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[DispatchOrders] WITH CHECK ADD FOREIGN KEY([DispatchId])
REFERENCES [dbo].[Dispatch] ([Id])
GO
ALTER TABLE [dbo].[DispatchOrders] WITH CHECK ADD FOREIGN KEY([OrderId])
REFERENCES [dbo].[Order] ([Id])
GO
解决方案
[Keyless]
无键实体类型支持许多与常规实体类型相同的映射功能,例如继承映射和导航属性 https://docs.microsoft.com/en-us/ef/core/modeling/keyless-entity-types?tabs=data - 注释
推荐阅读
- opencv - 基于分割的对象跟踪
- reactjs - 无法在 JSX 中导入视频组件
- python - 如何在python中运行“for”循环以获得有限结果
- sql-server - 在 SQL Server 2016(Power BI 服务器)上从 SSRS 将大文件导出到 Excel 时出错
- javascript - 在移动浏览器中打开时是否可以从反应应用程序重定向到已安装的颤振应用程序页面
- ubuntu - 无法解决letsencrypt错误,原因未知
- ios - 找不到适合 IBSimDeviceTypeiPad2x 类型的设备
- sql - 为 2 个不同的变量加入相同的描述符变量
- python - 多行 JSON 的 Python 正则表达式
- node.js - Node.js 中的并发请求