2012-01-24 55 views
2

有沒有辦法控制網橋實體創建的表的名稱?現在如果我運行此:代碼優先更改網橋實體表的名稱

public class Foo 
{ 
    public Int32 FooId { get; set; } 
    public virtual ICollection<Bar> Bars { get; set; } 
} 

public class Bar 
{ 
    public Int32 BarId { get; set; } 
    public virtual ICollection<Foo> Foos { get; set; } 
} 

產生的橋臺被命名爲BarFoo,任何辦法讓它FooBar的呢?

回答

5

您可以通過映射來自定義表名,如下所示。

public class MyContext : DbContext 
{  
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Foo>() 
      .HasMany(e => e.Bars) 
      .WithMany(s => s.Foos) 
      .Map(l => 
      { 
       l.ToTable("FooBar"); 
       l.MapLeftKey("FooId"); 
       l.MapRightKey("BarId"); 
      } 
      ); 
    } 
} 
+0

這不起作用,因爲我希望至少在EF 6中沒有。我的向上遷移按預期將其稱爲FooBar,我的向下遷移按預期將其稱爲FooBar。對於所有密集的目的,您會認爲該表實際上稱爲FooBar,因爲我可以在代碼中引用它。但是,從SQL Management Studio看,我可以看到物理表「仍然」被命名爲BooFar。實體只是在代碼中爲我做一些映射,而不是實際命名實際的表本身。 – DiggyJohn

1

看看EntityTypeConfiguration和fluent config api。有一個HasMany()方法在那裏應該做你想做的。

+1

哦我真的想避免流利的API ...希望有一些方法來裝飾東西.... – keeg

+0

好吧。我是另一種方式,我討厭裝飾我的代碼與負載的屬性,它看起來很混亂國際海事組織。每個都是自己的;) –

相關問題