考虑以下层次结构:
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:实体类型“Category”和“Department”不能共享表“ProductDim”,因为它们不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系和匹配的主键。
有什么解决方法吗?如果不能,实体框架能否成功地与维度建模的数据库一起使用?