我对如何正确设置我的模型感到有些困惑。下面你会看到我的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>();
}
}
答案 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
类中,该属性与类的名称不匹配(您已将该名称复数化),因此您需要该属性。