如何正确设置模型,POCO类?

时间:2013-04-13 19:56:54

标签: c# asp.net-mvc entity-framework data-annotations poco

我对如何正确设置我的模型感到有些困惑。下面你会看到我的POCO,我想知道如何自动增加ID,如果有必要设置数据注释[Key]。是否有某种命名约定使EF识别ID /主键或是否必须使用[Key]数据注释?

是否还需要在子实体中设置[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>();
    }
}

2 个答案:

答案 0 :(得分:1)

您应该查看Entity Framework Code First教程以获取更多详细信息。

具体来说,在您的情况下和一些基本规则(免责声明:) 我不是要覆盖所有内容只是几个基本规则....

  • 您可以删除[Key] -
    如果您使用<Entity>Id - 或仅Id,则默认情况下会将其设为PK “FK-s”和相关navigation properties也是如此(除了<Property>Id也按惯例映射),
    它不区分大小写。

  • 默认情况下为身份 - 对于有意义的pk类型 - int,long ... - 不是字符串,

  • 如果你有more than one pk - 那么你需要用Key“装饰”它 - 或者用流畅的配置,

等等......

注意:您可以从流畅的配置中调整和删除conventions 同样来自EF6,您将能够为您的代码定义一个新的。

  

我的建议:启用Migrations并查找迁移   脚本代码(.cs文件)生成的文件。它总是很清楚   什么是键,索引等的描述。了解你的最佳方法   实际创建了Db。

答案 1 :(得分:0)

我刚刚接触MVC,我发现this教程回答了你提出的大部分问题。

默认情况下,Entity Framework将名为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