2
  • ファイアーバード 2.5
  • エンティティ フレームワーク 5
  • FirebirdClientDLL 3.0.0.0

こんにちは、エンティティ フレームワーク (Code First) を使用して従来のデータベースにアクセスしようとしています。データベースが外部キーを使用しないという問題が発生しました...

public class CUSTOMERS
{
    public int CUSTOMERID { get; set; }
    public string NAME{ get; set; }
}

public class INVOICES
{
    public int INVOICEID{ get; set; }
    public int CUSTOMERID{ get; set; }

    public virtual CUSTOMERS CUSTOMERS { get; set; }
}

public class INVOICEContext : DbContext
{
    public DbSet<CUSTOMERS> CUSTOMERS{ get; set; }
    public DbSet<INVOICES> INVOICES{ get; set; }

    public INVOICEContext(DbConnection connectionString) : base(connectionString, false)
    {
        Database.SetInitializer<INVOICEContext>(null);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        /*modelBuilder.Entity<INVOICES>().HasRequired(b => b.CUSTOMERS)
                    .WithMany()
                    .Map(p => p.MapKey("INVOICEID"));*/ //Doesn't work because INVOICEID is defined

        modelBuilder.Entity<INVOICES>().HasKey(a => new { a.INVOICEID, a.CUSTOMERID});
        modelBuilder.Entity<CUSTOMERS>().HasKey(a => new { a.CUSTOMERID });

        base.OnModelCreating(modelBuilder);
    }
}

CUSTOMERID通常、クラスからプロパティを削除できますINVOICESが、この場合は主キーの一部です...

の使用を提案する多くのスレッドを見つけましたが、Entity Framework 5 (または 4.1) から削除されたIsIndependentようです。

私の拙い英語を理解していただければ幸いです。また、私が間違っていることのヒントを教えていただければ幸いです ^^

4

2 に答える 2

1

「データベースは外部キーを使用しない」とはどういう意味かわかりません。だから、多分以下はあなたが探している答えではありません。ただし、外部キープロパティの代わりに置き換え...MapKey...HasForeignKey使用すると、コードでコメント化されているリレーションシップマッピングを使用できると思います。CUSTOMERIDINVOICEID

modelBuilder.Entity<INVOICES>()
    .HasRequired(b => b.CUSTOMERS)
    .WithMany()
    .HasForeignKey(b => b.CUSTOMERID);

私の意見では、モデルと残りのマッピングは問題ありません。あなたの関係は、Entity Frameworkとの有効なマッピングである識別関係(つまり、外部キーが複合主キーの一部であることを意味します)です。

于 2012-11-16T12:34:09.580 に答える
1

これを試して ...

modelBuilder.Entity<INVOICES>()
      .HasRequired(i => i.CUSTOMERS)
      .WithMany()
      .HasForeignKey(i => i.CUSTOMERID);
于 2012-11-16T12:38:41.080 に答える