entity-framework - 具有列序号 <> 主键序号的 Entity Framework 复合键定义

标签 entity-framework ef-code-first primary-key code-first

给定一个表格

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/

相关文章:

c# - 无法加载文件或程序集 'EntityFramework,版本 = 6.0.0.0

c# - Entity Framework 多对多在连接表上有附加字段

entity-framework - 为什么我的外键引用属性没有反射(reflect)外键 ID 属性值?

mysql - 构建这个数据库的最佳方法是什么?

数据库主键和验证

c# - 如何根据实体输入参数过滤 IEnumerable

c# - 添加对象不起作用

entity-framework-4 - 模拟DbContext.Set <T>()吗?

sql-server - 如何停止EF4.1 Code-First为实体PK创建Culstered索引

mysql - 主键索引自动