2

我对如何正确设置我的模型有点困惑。下面你会看到我的 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>();
    }
}
4

2 回答 2

1

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

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

  • 您可以删除[Key]-
    如果您使用<Entity>Id- 或者Id默认情况下将其制作成 PK。
    'FK-s' 和相关的也是navigation properties如此(除了它<Property>Id也是按约定映射的),
    它不区分大小写。

  • 默认情况下标识 - 对于有意义的 pk 类型 - int、long ... - 不适用于字符串,

  • 如果你有more than onepk - 那么你需要用 Key '装饰'它 - 或者在流利的配置中,

ETC...

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

我的建议:打开Migrations并查找迁移脚本代码(.cs 文件)生成的文件。它总是清楚地说明什么是键、索引等。了解如何实际创建 Db 的最佳方式。

于 2013-04-13T20:13:44.043 回答
0

我也刚开始使用 MVC,我发现教程回答了您提出的大部分问题。

默认情况下,实体框架将名为 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

于 2013-04-13T20:03:26.323 回答