Рассмотрим следующую иерархию:
Department -> Category -> Product
(Каждый отдел содержит несколько категорий, каждая из которых содержит несколько продуктов.)
Используя 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:
типы объектов «Категория» и
«Отдел» не может разделить таблицу
«ProductDim», потому что они не находятся в
иерархия того же типа или не имеют
действительный один к одному внешний ключ
отношения с соответствующим основным
ключи между ними.
Есть ли обходной путь для этого? И если нет, то может ли Entity Framework успешно использоваться с базами данных с размерным моделированием?