2013-04-13 126 views
2

我對如何正確設置模型感到困惑。下面你會看到我的POCO,我想知道如何自動增加ID的值,以及是否需要設置數據註釋[Key]。是否有某種使EF識別ID /主鍵的命名約定,還是必須使用[Key]數據註釋?如何正確設置模型,POCO類?

還有必要在子實體中設置[Key]數據註釋嗎?

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 
    public DateTime Reg { get; set; } 
    public virtual ICollection<Stats> Stats { get; set; } 
} 

public class Stats 
{ 
    [Key] 
    public int StatId { get; set; } 
    public string Age { get; set; } 
    public string Height { get; set; } 
    public string Weight { get; set; } 
    public bool Sex { get; set; } 
} 

public class BodylogContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Stats> Stats { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Database.SetInitializer<BodylogContext>(null); 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
} 

回答

0

我只是用MVC過於我發現this教程回答你們中的大多數已經提出的問題。

默認情況下,實體框架將名爲ID或classnameID的屬性解釋爲主鍵。因此,在User類中,您不需要UserId屬性上的[Key]屬性。在您的Stats類中,該屬性與類的名稱不匹配(您已將名稱複數化),因此在此處需要該屬性。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

1

你應該查找實體框架代碼優先教程瞭解更多詳情。

具體來說,你的情況和一些基本規則(免責聲明:) 我並不想面面俱到只是一些基本的....

  • 您可以刪除[Key] -
    如果您使用<Entity>Id - 或者只是Id,則默認情況下會將其製作爲PK。
    'FK-s'和相關的navigation properties(除了<Property>Id也按照慣例映射除外),
    它是不區分大小寫的。

  • 身份默認情況下 - 爲PK類是有道理的 - 的int,long ... - 不是字符串,

  • 如果你有more than one PK - 那麼你需要「裝飾」它重點 - 或用流利的配置,

等等

注:可以調整,並從流暢的配置中刪除conventions
同樣來自EF6,您將能夠爲您的代碼定義一個新的。

我的建議:打開Migrations查查遷移 腳本代碼(cs文件)生成的文件。它總是有清晰的 描述什麼是鍵,索引等。最好的方式來了解你的012bDb是如何實際創建的。

+0

謝謝我發現這真的很有幫助,感謝你的回答。 – brk