EF 6数据注释
问题描述:
[Table("Pages")]
public class Page
{
[Key, Column("Page_Id")]
public int ID { get; set; }
public string Name {get;set;}
public virtual ICollection<Category> Categories { get; set; }
public Page()
{
this.Categories = new HashSet<Category>();
}
}
[Table("Categories")]
public class Category
{
[Key]
public int Category_ID { get; set; }
public string Name {get;set;}
public virtual ICollection<Page> Pages { get; set; }
public Category()
{
this.Pages = new HashSet<Page>();
}
}
[Table("CategoryPages")]
public class CategoryPage
{
[Key, Column(Order = 0)]
public int category_ID { get; set; }
[Key, Column(Order = 1)]
public int page_ID { get; set; }
public virtual Page Page { get; set; }
public virtual Category Category { get; set; }
}
public partial class Context : DbContext
{
public Context() : base("name=Context") { }
public virtual DbSet<Page> Pages { get; set; }
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<CategoryPage> CategoryPages { get; set; }
}
当尝试访问类别,如下面的代码(从储存库方法)EF 6数据注释
int Id = 1;
Page page = context.Pages.Where(x => x.ID == Id).FirstOrDefault();
Category category = page.Categories.FirstOrDefault();
return category;
给出Me错误
{“,而执行命令定义时发生错误。“内部异常:{”无效对象名称 'dbo.PageCategories'。“}
我没有表名dbo.PageCategories,我将dbo.PageCategories更名为dbo.Categories
它仍在搜索此表。
答
我没有看到任何代码错误。我相信你在生成数据库后重新命名了表,这意味着模型和数据库不同步。您必须为其添加新的迁移(或删除现有的迁移并添加一个新的迁移),然后您应该能够更新数据库。
如果您还没有使用EF Code First Migrations,那么MSDN Article应该有所帮助。
您的代码不包含任何“PageCategories”。此代码不能产生您粘贴的错误。 –
这就是我所关心的,我在整个解决方案中搜索PageCategories给了我0结果,但它产生了这样的错误。 – HPP
嗨,你可以*重建*包含'[Table(“CategoryPages”)]的项目吗?我相信,无论是那一个,还是一个类别都被重新命名了。无论如何,你总是可以使用[ILSpy](http://ilspy.net/)窥视二进制文件。 –