首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在EF-Code-First中指定主键名称

如何在EF-Code-First中指定主键名称
EN

Stack Overflow用户
提问于 2012-11-28 22:34:32
回答 5查看 53.9K关注 0票数 33

我正在使用Entity Framework Codefirst创建我的数据库。架构名称为dbo.pk_Jobs的默认主键在我通过ODBC连接到access 2007时似乎会打乱它。如果我手动编辑名称并删除架构名称,并将此主键重命名为pk_jobs,Access现在可以读取表。

是否可以使用Fluent Api、数据属性或任何其他方法指定不包含模式名称的主键名称。

代码语言:javascript
复制
public class ReportsContext : DbContext
{
    public DbSet<Job> Jobs { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Job>().ToTable("Jobs");
        modelBuilder.Entity<Job>().HasKey(j => j.uuid);

        base.OnModelCreating(modelBuilder);
    }
}
public class Job
{
    public Guid uuid{ get; set; }
    public int active{ get; set; }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-29 02:52:46

如果要指定列名并覆盖属性名,可以尝试以下操作:

使用注解

代码语言:javascript
复制
public class Job
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("CustomIdName")]
    public Guid uuid { get; set; }
    public int active { get; set; }
}

首先使用代码

代码语言:javascript
复制
    protected override void OnModelCreating(DbModelBuilder mb)
    {
        base.OnModelCreating(mb);

        mb.Entity<Job>()
            .HasKey(i => i.uuid);
        mb.Entity<Job>()
          .Property(i => i.uuid)
          .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
          .HasColumnName("CustomIdName");
    }

内部迁移配置

代码语言:javascript
复制
public partial class ChangePrimaryKey : DbMigration
{
    public override void Up()
    {
        Sql(@"exec sp_rename 'SchemaName.TableName.IndexName', 'New_IndexName', 'INDEX'");
    }

    public override void Down()
    {
        Sql(@"exec sp_rename 'SchemaName.TableName.New_IndexName', 'Old_IndexName', 'INDEX'");
    }
}
票数 61
EN

Stack Overflow用户

发布于 2012-11-29 00:31:56

您可以使用密钥属性来指定主键的各个部分。因此,您的Job类可能是

代码语言:javascript
复制
public class Job
{
    [Key]
    public Guid uuid{ get; set; }
    public int active{ get; set; }
}

数据注记属性在System.ComponentModel.DataAnnotations namespace中定义

票数 8
EN

Stack Overflow用户

发布于 2012-11-29 00:39:03

如果我理解的话,您是在问如何更改Entity Framework使用的主键列的名称。在您的HasKey语句中添加以下内容可以解决这一问题:

代码语言:javascript
复制
modelBuilder.Entity<Job>().Property(j => j.uuid).HasColumnName("pk_Jobs")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13607512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档