给定一个表格
CREATE TABLE pk_ordinal_test
(
C1 INT NOT NULL,
C2 INT NOT NULL,
C3 INT NOT NULL
)
ALTER TABLE pk_ordinal_test ADD PRIMARY KEY (C3, C1);
请注意,主键已定义为 C3、C1,列顺序为 C1、C3。
主键的 Entity Framework 代码优先配置是否应该采用主键序数:
HasKey(x => new { x.C3, x.C1 });
或者应该在列序数中:
HasKey(x => new { x.C1, x.C3 });
使用 MSI 安装中的 EF Tools v6.1.3,使用 Visual Studio -> 添加 -> 新项目 -> ADO.Net 实体数据模型。选择Code-first,生成以下内容:
public partial class pk_ordinal_test
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int C1 { get; set; }
public int C2 { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int C3 { get; set; }
}
上面定义的主列顺序不正确。
最佳答案
如果您有具有复合外键的实体,则必须指定与相应主键属性使用的列顺序相同的列顺序,因此您必须选择的选项是主键序数:
HasKey(x => new { x.C3, x.C1 });
关于entity-framework - 具有列序号 <> 主键序号的 Entity Framework 复合键定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32563998/