2012-07-13 33 views
2

DataAnnotations與Fluent API方法做同樣的事情嗎?流利的API和數據註釋

例如,.HasRequired == [必需]?

.HasKey == [Key]?

如果我不希望我的表pk字段生成爲ClassNameClassNameID,如果我爲我的pk屬性使用ClassNameID格式,我必須用[Key]標記類鍵還是使用.HasKey?

我可以使用DataAnnotations和Fluent API的組合;或者,它是一個還是另一個?

我必須映射M:這兩個類m關係參與即

public class Foo 
{ 
    public ICollection<Bar> Bars 
} 

public class Bar 
{ 
    public ICollection<Bar> Foos 
} 

public class Context : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Foo>() 
      .HasMany(f => f.Bars).WithMany(b => b.Foos) 
      .Map(t => 
       { 
        t.MapLeftKey("FooID"); 
        t.MapRightKey("BarId"); 
        t.ToTable("FooBar"); 
       }); 

     modelBuilder.Entity<Bar>() 
      .HasMany(b => b.Foos).WithMany(f => f.Bars) 
      .Map(t => 
       { 
        t.MapLeftKey("FooID"); 
        t.MapRightKey("BarId"); 
        t.ToTable("FooBar"); 
       }); 
} 

感謝。

回答

2

我可以使用DataAnnotations和Fluent API的組合;或者,它是 其中之一?

是的,您可以使用組合。不過,選擇一個或另一個通常會更好。我更喜歡流利的,因爲它保持了對實體類的持久性關注。

DataAnnotations與Fluent API方法做同樣的事情嗎?

例如,.HasRequired == [必需]?

.HasKey == [Key]?

是的。此外,.IsRequired == [必需]

我必須映射M:這兩個類m關係涉及

沒有,你只需要的關係的一個側面映射。您可以映射雙方,但是如果您更改關係,則需要修改兩組代碼。此外,當你映射雙方時,兩個映射必須解析爲相同的結果(即db中的相同外鍵聲明)。

我必須標記帶班鍵[鍵]或使用.HasKey如果我不想因爲ClassNameClassNameID產生我 臺PK場,如果我使用 ClassNameID格式爲我的PK屬性?

是的,除非您的屬性名稱是Id或PersonId/ProductId/OrderId/WhateverEntityNameId。按照慣例,EF會猜測這些是您的關鍵屬性。然而,從不會傷害,通過在您的modelBuilder上調用.HasKey來明確這一點。

+0

短而甜。謝謝。 :) – Erik 2012-07-13 19:41:47