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

标签: .netasp.net-core.net-coreentity-framework-core

解决方案


[Keyless]

无键实体类型支持许多与常规实体类型相同的映射功能,例如继承映射和导航属性 https://docs.microsoft.com/en-us/ef/core/modeling/keyless-entity-types?tabs=data - 注释


推荐阅读