C# 实体框架组合主键,其中一个是标识

C# 实体框架组合主键,其中一个是标识,c#,entity-framework,ef-fluent-api,C#,Entity Framework,Ef Fluent Api,我在类中映射了一个复合键,如图所示: HasKey(l => new { l.A, l.B }); 但是,这里A应该是一个身份 Property(l => l.A).HasColumnName("A").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); Property(l => l.B).HasColumnName("B"); 然而,当我尝试添加一个值为A(因为它是一个标识,所以为null)和B的对

我在类中映射了一个复合键,如图所示:

HasKey(l => new { l.A, l.B });
但是,这里A应该是一个身份

Property(l => l.A).HasColumnName("A").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(l => l.B).HasColumnName("B");
然而,当我尝试添加一个值为A(因为它是一个标识,所以为null)和B的对象时,我得到了一个主键冲突

有没有办法绕过这个问题

类型如下:

public Int64? A{ get; set; } //Identity
public int B { get; set; }
来自DB世界:

A   bigint
B   int

在键字段为整数的情况下,Code First默认为
DatabaseGeneratedOption.Identity
,因此,
A
B
默认为Identity。您需要指定
B
不是标识。尝试此配置:

Property(l => l.A).HasColumnName("A");
Property(l => l.B).HasColumnName("B").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

顺便问一下,为什么
A
可以为空?。PK为表中的每一行定义一个唯一标识符,因此,由于is标识,当您在表中插入新行时,该列中始终会有一个值。

似乎即使在复合主键中也不允许有空值。如前所述,解决方法是将一个单独的Id列定义为主键。

a和B是什么类型?为什么在主键中需要
B
?为什么身份栏不够?