私はデータベースを作成するために 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; }
}
ベストアンサー1
列名を指定してプロパティ名をオーバーライドする場合は、次の操作を試してください。
注釈の使用
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'");
}
}