次の階層を検討してください。
Department -> Category -> Product
(各部門には複数のカテゴリがあり、それぞれに複数の製品が含まれています。)
次元モデリングへのKimballアプローチを使用して、次の列を持つ ProductDim テーブルを作成しました。
ProductKey
Product
Category
Department
Department
EF 4.1 を使用して、、、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 : エンティティ タイプ 'Category' と 'Department' はテーブル 'ProductDim' を共有できません。これらは同じタイプ階層にないか、それらの間で主キーが一致する有効な 1 対 1 の外部キー関係がないためです。
これに対する回避策はありますか? そうでない場合、Entity Framework は次元的にモデル化されたデータベースでうまく使用できますか?