实体框架代码优先:共享主键

Posted

技术标签:

【中文标题】实体框架代码优先:共享主键【英文标题】:Entity Framework Code First: shared primary key 【发布时间】:2011-05-05 09:02:13 【问题描述】:

我有一个现有表,其主键超过 3 列(1 个 varchar 和 2 个整数)。 我如何告诉实体框架使用这个“密钥”。 是否可以使用模型构建器、属性或其他方式?

谢谢!

【问题讨论】:

【参考方案1】:

在fluent api中你必须使用匿名类型:

modelBuilder.Entity<YourType>()
            .HasKey(e => new 
                
                    e.VarChar,
                    e.Int1,
                    e.Int2
                );

其他方式是使用数据注释:

public class YourType

    [Key, Column(Order = 0)]
    public string VarChar  get; set; 
    [Key, Column(Order = 1)]
    public int Int1  get; set; 
    [Key, Column(Order = 2)]
    public int Int2  get; set; 

在这两种情况下,列的顺序都很重要。一旦您尝试使用DbSet&lt;YourType&gt;.Find,您将必须以相同的顺序提供密钥。 EF 也在内部使用 order。

【讨论】:

以上是关于实体框架代码优先:共享主键的主要内容,如果未能解决你的问题,请参考以下文章

如何在实体框架代码优先数据库中手动设置实体主键?

实体框架代码优先主键约束名称

实体框架 4.1 代码优先映射到将主键作为外键列的表

实体框架代码优先导航问题

实体框架代码优先迁移忽略 [Key] 并强制复合键

实体框架代码优先:迁移失败并更新数据库,强制不必要的(?)添加迁移