我正在制作一个非常简单的 MVC 应用程序来管理一些家庭事务。以前,我总是在 MVC 模型生成器(GUI 的东西)中制作我的数据模型,或者导入已经制作的 SQL 表。
这一次,我想用代码优先的方法来做。
我将在此举一个实体的例子:
public class Expense {
[Key]
public int ExpenseId;
public double ExpenseValue;
public DateTime ExpenseDate;
public string ExpenseDescription;
public ExpenseType ExpenseType;
public Currency ExpenseCurrency;
public List<ExpenseUser> Users;
}
还有我的 DbContext 派生对象:
public class HawsContext : DbContext {
public DbSet<Expense> Expenses { get; set; }
public DbSet<ExpenseType> ExpenseTypes { get; set; }
public DbSet<ExpenseUser> ExpenseUsers { get; set; }
public ExpenseUser GetUserByUserName(string userName) {
return ExpenseUsers.Where(u => u.UserName == userName).FirstOrDefault();
}
}
每当我实例化对象时,都会收到以下错误:
在模型生成期间检测到一个或多个验证错误:
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'Expense' 没有定义键。定义此 EntityType 的键。\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'ExpenseType' 没有定义键。定义此 EntityType 的键。\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'ExpenseUser' 没有定义键。定义此 EntityType 的键。\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'Expenses' 基于没有定义键的类型'Expense'。\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'ExpenseTypes' 基于没有定义键的类型 'ExpenseType'。\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'ExpenseUsers' 基于没有定义键的类型'ExpenseUser'。
我究竟做错了什么?我所有的实体在它们各自的键前面都有 [Key],所有内容都被编译,没有错误或警告。只有在我实例化上下文时它才不起作用,大概是在它即将被创建时(它实际上还没有创建任何 SQL 表)