2012-06-15 133 views
5

我以前做过这个,但由于某种原因无法让它在EF5中工作。EF5代码第一多到迁移

通常它只是自动拿起当我有很多像这样一个多对多的关系...

public class Beer 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Restaurant> Restaurants { get; set; } 
} 

public class Restaurant 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Beer> Beers { get; set; } 
} 

我想要一个RestaurantsBeers表或任何只有RestaurantId和BeerId。

当我使用普通的Code First方式通过运行它的应用程序来创建它时。虽然

EF Working

使用迁移,它不会产生该表。

EF Not working

我跑Enable-Migrations然后Add-Migration FirstDb终于Update-Database ......没有骰子...

也试过这个...

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Beer>() 
      .HasMany(b => b.Restaurants) 
      .WithMany(a => a.Beers) 
      .Map(m => m.MapLeftKey("BeerId") 
          .MapRightKey("RestaurantId") 
          .ToTable("BeersRestaurants")); 
    } 
+0

认为你需要在你的关系中使用foreignKey属性,这样就可以获得多对多的关系。无论如何,我一直使用这个属性并且永远不会遇到问题。 – davethecoder

回答

3

迁移创建一个新的M2M关系是根据我的经验,不支持EF5.0RC,试图追踪相同的问题。因此,为什么它将在标准数据库创建上工作,但不适用于迁移功能。您可以从标准代码优先数据库初始化中导出创建SQL,并在现在的迁移中手动运行它。

这应该在EF5.0进入RTM时解决,但现在我们必须等待它。

+0

谢谢,很高兴知道! – jcreamer898

+0

任何人阅读此更新。 EF 5 Code First Migrations确实以这种方式支持M2M定义。 –

+0

正如我所说,它已在RTM发布之前解决。因此现在起作用,正如答案所述。 – VulgarBinary