EF 6数据注释

时间:2017-09-01 22:10:41

标签: c# asp.net entity-framework-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; }
}

当尝试访问类似以下代码的类别时(来自存储库的方法)

   int Id = 1;
   Page page = context.Pages.Where(x => x.ID == Id).FirstOrDefault();
   Category category = page.Categories.FirstOrDefault();
   return category;

给我错误

  

{&#34;执行命令定义时发生错误。见   细节的内部异常。&#34;}内部异常:{&#34;无效的对象名称   &#39; dbo.PageCategories&#39;&#34;}

我没有表名dbo.PageCategories,我将dbo.PageCategories重命名为dbo.Categories

还在寻找这张桌子。

1 个答案:

答案 0 :(得分:0)

我没有看到代码有任何问题。我相信你在生成数据库后重命名了表,这意味着模型和数据库不同步。您必须为其添加新的迁移(或删除现有的迁移并添加新的迁移),然后您应该能够更新数据库。

如果您尚未使用EF Code First Migrations,则此MSDN Article应该有所帮助。