2013-04-13 127 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