2

次の階層を考えてみましょう:階層を含むディメンションテーブルにエンティティをマップする方法はありますか?

Department -> Category -> Product 

(各部門は複数の製品が含まれ、それぞれが複数のカテゴリが含まれてい)

dimensional modelingKimballアプローチを使用して、私は次の列でProductDimテーブルを作成しました:

ProductKey 
Product 
Category 
Department 
私はマップするためにEF 4.1を使用しようとしている

DepartmentCategory、およびProductエンティティをProductDimテーブルに追加します。ここでは、関連するクラスの簡易版は、次のとおりです。

public class Department 
{ 
    public string Name { get; set; } 
} 

public class Category 
{ 
    public string Name { get; set; } 
} 

public class Product 
{ 
    public string Name { get; set; } 
} 

public class MyContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<Department>().ToTable("ProductDim"); 
     modelBuilder.Entity<Department>().HasKey(t => t.Name); 
     modelBuilder.Entity<Department>().Property(t => t.Name).HasColumnName("Department"); 

     modelBuilder.Entity<Category>().ToTable("ProductDim"); 
     modelBuilder.Entity<Category>().HasKey(t => t.Name); 
     modelBuilder.Entity<Category>().Property(t => t.Name).HasColumnName("Category"); 

     modelBuilder.Entity<Product>().ToTable("ProductDim"); 
     modelBuilder.Entity<Product>().HasKey(t => t.Name); 
     modelBuilder.Entity<Product>().Property(t => t.Name).HasColumnName("Product"); 
    } 
} 

問題は、私はこれらのクラスを使用しようとすると、私は次の例外を取得することです:

のSystem.InvalidOperationException: エンティティタイプ "カテゴリ 'と ' Department 'はテーブル ' ProductDim 'を共有できません 同じタイプの階層に属していないか、 有効な一対一の外部キーがありません 一致するプライマリとの関係 キー それらの間の。

これに対応する方法はありますか?そうでない場合は、Entity Frameworkを次元モデリングされたデータベースで正常に使用できますか?

+0

コードを最初に使用していますか? – Jethro

+0

@Jethro - はい、私はコードファーストアプローチを使用しています。 – MCS

答えて

0

あなたのことについて何かが正しいとは思わないだけです。 以下の例のようにProductクラスを作成する必要があります。

public class Department 
{ 
    public string Name { get; set; } 
    public List<Category> Categories { get; set; } 
} 

あなたはCategoryクラスが次のようになります。

public class Category 
{ 
    public string Name { get; set; } 
    public List<Product> Products { get; set; } 
} 

これは、Departmentのロジックに従うと、多くの製品が多数存在します。

+0

これは次のステップです。エンティティをテーブルにマッピングすると、あなたの例でDepartmentとCategoryをProductDimテーブルにどのようにマッピングすればよいでしょうか? – MCS

3

エンティティフレームワークは、正しくモデル化され正規化されたリレーショナル(OLTP)データベースでのみ機能します。データウェアハウスは、ORMマッピング用ではないビジネスインテリジェンス(OLAP)ツール用です。あなたのエンティティにテーブルをマップすることはありません - エンティティフレームワークはそれを行うことができません。 (それがあなたのエンティティが継承階層にある必要があります意味)あなたはタイプの継承ごとの表を使用している

  • :エラーとして

    はEFが場合にのみ、同じテーブルにマッピング複数のエンティティを可能に述べています。エンティティは明らかに同じ継承構造の一部ではありません。

  • 1つのテーブルが1対1の関係で複数のエンティティに分割されているテーブル分割を使用しています。
関連する問題