【发布时间】:2011-07-05 17:45:44
【问题描述】:
考虑以下层次结构:
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: 实体类型“类别”和 “部门”不能共享表 'ProductDim' 因为它们不在 相同类型的层次结构或没有 有效的一对一外键 与匹配的主要关系 它们之间的键。
有什么解决方法吗?如果不能,Entity Framework 能否成功地与维度建模的数据库一起使用?
【问题讨论】:
-
您是否使用代码优先方法?
-
@Jethro - 是的,我使用的是代码优先方法。
标签: c# entity-framework entity-framework-4.1 data-warehouse dimensional-modeling