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
?为什么身份栏不够?