33

Entity Framework Codefirst を使用してデータベースを作成しています。ODBC 経由で接続すると、スキーマ名が dbo.pk_Jobs のデフォルトの主キーが 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; }
}
4

5 に答える 5

61

列名を指定してプロパティ名をオーバーライドする場合は、次の方法を試してください。

注釈の使用

public class Job
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("CustomIdName")]
    public Guid uuid { get; set; }
    public int active { get; set; }
}

Code First の使用

    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-28T18:52:46.493 に答える
8

Key属性を使用して、主キーの部分を指定できます。だからあなたの Job クラスは

public class Job
{
    [Key]
    public Guid uuid{ get; set; }
    public int active{ get; set; }
}

データ注釈属性はSystem.ComponentModel.DataAnnotations 名前空間で定義されています

于 2012-11-28T16:31:55.597 に答える
2

理解できれば、Entity Framework で使用される主キー列の名前を変更する方法を尋ねています。HasKey ステートメントへの次の追加により、これを処理する必要があります。

modelBuilder.Entity<Job>().Property(j => j.uuid).HasColumnName("pk_Jobs")
于 2012-11-28T16:39:03.223 に答える