我正在使用Entity Framework Codefirst创建我的数据库。架构名称为dbo.pk_Jobs的默认主键在我通过ODBC连接到access 2007时似乎会打乱它。如果我手动编辑名称并删除架构名称,并将此主键重命名为pk_jobs,Access现在可以读取表。
是否可以使用Fluent Api、数据属性或任何其他方法指定不包含模式名称的主键名称。
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; }
}发布于 2012-11-29 02:52:46
如果要指定列名并覆盖属性名,可以尝试以下操作:
使用注解
public class Job
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("CustomIdName")]
public Guid uuid { get; set; }
public int active { get; set; }
}首先使用代码
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");
}内部迁移配置
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'");
}
}发布于 2012-11-29 00:31:56
您可以使用密钥属性来指定主键的各个部分。因此,您的Job类可能是
public class Job
{
[Key]
public Guid uuid{ get; set; }
public int active{ get; set; }
}数据注记属性在System.ComponentModel.DataAnnotations namespace中定义
发布于 2012-11-29 00:39:03
如果我理解的话,您是在问如何更改Entity Framework使用的主键列的名称。在您的HasKey语句中添加以下内容可以解决这一问题:
modelBuilder.Entity<Job>().Property(j => j.uuid).HasColumnName("pk_Jobs")https://stackoverflow.com/questions/13607512
复制相似问题