2011-09-25 47 views
6

enter image description here实体框架试图检索不存在的列

我试图从数据库中检索的VideoCollection项目,但得到{"Invalid column name 'User_Id'."} - 当我设置一个断点,我可以看到的是,EF试图选择user_id列但它不在Cs对象或数据库模式中。 (它确实存在于另一个表中,但这不重要)。无论如何调试为什么会发生这种情况?

回答

9

你有一个用户类有一个VideoCollection的引用?如果是这样,你可能需要明确定义两者之间的关系。实际上,EF看起来像是推断VideoCollection应该包含一个外键,User_Id定义了这种关系。

+0

你几乎在那里 - 我有一个中间表PurchasedCollections - 具有UserId和VideoCollectionId(都作为外键)。这应该明确定义关系?我从Cs对象和DbContext中删除了这个中介(因为我不需要直接访问它)。这可能会导致问题吗? – greenimpala

+2

@ st3您需要将表格重命名为User_VideoCollections或重写OnModelCreating并通过PurchasedCollections表格明确建立连接。 EF(代码优先)约定期望您有直接的FK关系或使用实体名称的连接表。如果你偏离了这一点,你需要告诉它如何建立连接。就像'builder.Entity ().HasMany(u => u.Collections).WithRequired()。ToTable(“PurchasedCollections”);' – tvanfosson

+0

这似乎奏效了,谢谢。你是否说要用这个命名约定声明任何多对多的关系(除非你明确定义关系?)。 – greenimpala