次の階層を考えてみましょう:階層を含むディメンションテーブルにエンティティをマップする方法はありますか?
Department -> Category -> Product
(各部門は複数の製品が含まれ、それぞれが複数のカテゴリが含まれてい)
をdimensional modelingへKimballアプローチを使用して、私は次の列でProductDimテーブルを作成しました:
ProductKey
Product
Category
Department
私はマップするためにEF 4.1を使用しようとしている
私Department
、Category
、および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を次元モデリングされたデータベースで正常に使用できますか?
コードを最初に使用していますか? – Jethro
@Jethro - はい、私はコードファーストアプローチを使用しています。 – MCS