【发布时间】:2011-08-19 13:36:22
【问题描述】:
此代码不起作用。怎么了? OnModelCreating 不会影响任何结果?因为我在我的数据库中看不到“ProductCategories”表。
public class GoldContext : DbContext
{
public virtual DbSet<Prouct> Products { get; set; }
public virtual DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//HACK:4.1 modelBuilder.Conventions.Add(new DecimalPrecisionAttributeConvention());
modelBuilder.Entity<Product>()
.HasMany<Category>(m => m.Categories)
.WithMany().Map(m =>
m.MapLeftKey("ProductId")
.MapRightKey("CategoryId")
.ToTable("ProductCategories"));
base.OnModelCreating(modelBuilder);
}
}
//product and category classes look like this.
public class Product
{
[Key]
public int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
public class Category
{
[Key]
public int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
提前致谢。
【问题讨论】:
-
您能提供更多信息吗?您是否有可能正在寻找错误的数据库和/或上下文?有任何错误信息吗?
-
嗨,我试图提供更多信息。没有任何错误信息。一切都好!但没有向我们承诺的“ProductCategories”数据表。
-
这很奇怪,我已将您的实体/映射添加到项目中,并且一切都按预期工作(包括
ProductCategories表。 -
顺便说一下,你应该写
.WithMany(c => c.Products)。否则 EF 不会假定Category.Products属于您的多对多关系,而是在Category和Product之间创建第二个一对多关系。Category.Products将属于该关系。但这只是附带说明,它不是您当前问题的根源。 -
Slauma,是的,你完全正确。我也为类别写了相同的地图。
标签: entity-framework entity-framework-4 entity-framework-4.1 ef-code-first entity-framework-ctp5