1

我正在制作一个非常简单的 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 表)

4

1 回答 1

3

我谷歌搜索发现了这个问题。您必须制作您的 Key 属性。

[Key]
public int ExpenseId {get; set;}
于 2013-10-10T06:35:55.670 回答