SqlException (0x80131904): Invalid object name 'dbo.Categories'

后端 未结 5 553
我寻月下人不归
我寻月下人不归 2020-12-03 07:47

I am getting the exception above when I run an application. The application is using asp.net mvc 3 / C#. I made an mdf file and added it under App_Data folder in Visual Web

相关标签:
5条回答
  • 2020-12-03 08:26

    Try using model builder class.It is the way to configure or explicitly define the mapping between table and model class.

    In your entity/context class try adding this code

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
           base.OnModelCreating(modelBuilder);
           modelBuilder.Entity<Category>().ToTable("Category");
        }
    

    Its a method.Make sure ur using all the including statements.

    0 讨论(0)
  • 2020-12-03 08:31

    What you really want to do to fix this is in you Context class you should have a method called OnModelCreating... make sure it has this:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
    
    0 讨论(0)
  • 2020-12-03 08:32

    This usually means a simple configuration issue:

    • perhaps there genuinely is no such table
    • perhaps the table is there, but there is no dbo scheme (it might be in Fred.Categories)
    • perhaps the db is case-sensitive (which is fine), and the table is actually dbo.CATEGORIES

    Any of these will cause the above exception. In particular, you state:

    My database contains 6 tables and one of them is Category.

    Now to a machine, Category != Categories

    0 讨论(0)
  • 2020-12-03 08:40

    Proven,tested & verified for table with name category or any SQL keywords named table use ToTable to instruct specific table name

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
         modelBuilder.Entity<category>().ToTable("category");
     }
    
    0 讨论(0)
  • 2020-12-03 08:42

    Since this was still top search hit on the exception in April of 2018 and it led me to a solution, let me tack this on for a specific situation...

    Our application is based on ABP and ABP.Zero, and we already have a pattern that fit Marc's answer. While I bet explicit mapping in the OnModelCreating method (a la Dhananjay's answer) would have worked perfectly, it seemed like ABP's mapping was working perfectly up to this point and I didn't want to break the pattern.

    My solution was to add a table attribute to the entity class, and this settled EF's confusion.

    using System;
    using Abp.Domain.Entities;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace Discovery.History
    {
    
        [Table("HistoryRecords")]
        public class HistoryRecord : Entity<int>
        {
            public int ResearcherCount { get; set; }
            public DateTime DateSubmitted { get; set; }
            public string Comments { get; set; }
        }
    }
    
    0 讨论(0)
提交回复
热议问题