我收到以下错误:
One or more validation errors were detected during model generation:
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'UserAccount' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'UserAccounts' is based on type 'UserAccount' that has no keys defined.
此错误由代码触发:
_Db.Database.Initialize(true);
我认为由于某种原因,它没有在模型上获取[Key]属性。 最初当我尝试运行代码时,我没有添加密钥属性,这是否意味着已经创建/缓存了一些阻止此密钥被应用的内容?
除了包含Entity Framework 5
之外,MVC4项目几乎是一个空白的设置型号代码
public class AccountContext: DbContext
{
public AccountContext()
: base("DefaultConnection")
{
}
public DbSet<UserAccount> UserAccounts { get; set; }
}
[Table("UserAccount")]
public class UserAccount
{
[Key]
[Required]
public string Username;
[Required]
[DataType(DataType.Password)]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
public string Password;
public string Name;
public string Surname;
[Required]
public string Email;
}
Global.asax初始化
Database.SetInitializer(new DropCreateDatabaseAlways<AccountContext>());
var _Db = new AccountContext();
_Db.Database.Initialize(true);
我已经做了一些搜索并理解命名约定,例如Id / UserId等。但是我想明确使用[Key]并调用字段Username。
答案 0 :(得分:9)
我相信EF只允许映射到属性,而不是你使用过的字段。
尝试更改:
[Key]
[Required]
public string Username;
到
[Key]
[Required]
public string Username { get; set; }
答案 1 :(得分:4)
我想补充一点,如果你碰巧忘记将目标密钥属性公开,你将收到同样的错误。我来到这里是因为同样的关键错误,并注意到我缺少“公共”属性。我添加了它,我的错误就消失了。