MVC错误 - EntityFramework.SqlServer.dll中发生了'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理

时间:2016-05-09 12:42:51

标签: c# asp.net-mvc

我是MVC(和asp.net)的新手。当我执行代码时,会出现此错误消息:

 An exception of type 'System.Data.SqlClient.SqlException' occurred in   
 EntityFramework.SqlServer.dll but was not handled in user code
 Additional information: Invalid object name 'delays_table'.

这是我的控制器:

namespace public_transportaion.Controllers
{
public class StatisticsController : Controller
{
    private StatisticDBContext db = new StatisticDBContext();

    // GET: Statistics
    public ActionResult Index()
    {
        string query = "SELECT agency_name, COUNT(*) "
   + "FROM delays_table "
   + "WHERE late_type = 'miss' "
   + "GROUP BY agency_name";

        IEnumerable<Statistic> data = db.Database.SqlQuery<Statistic>(query);

        return View(data.ToList());

    }

这是我的模特:

namespace public_transportaion.Models
{
public class Statistic
{
    public int ID { get; set; }
    public string agency_name { get; set; }
    public int missCount { get; set; }
}

public class StatisticDBContext : DbContext
{
    public DbSet<Statistic> Statistics { get; set; }
}
}

这是数据库信息:

CREATE TABLE [dbo].[delays_table] 
[ID]                     INT            IDENTITY (1, 1) NOT NULL,
[tripID]                 BIGINT         NOT NULL,
[planned_arrival_timeID] DATETIME       NOT NULL,
[route_id]               BIGINT         NOT NULL,
[agency_name]            NVARCHAR (MAX) NULL,
[startDate]              DATETIME       NOT NULL,
[endDate]                DATETIME       NOT NULL,
[late_type]              NVARCHAR (MAX) NULL,
[duration]               REAL           NOT NULL,
CONSTRAINT [PK_dbo.delays_table] PRIMARY KEY CLUSTERED ([ID] ASC)

我还尝试在查询中使用'FROM dbo.delays_table'或'FROM delays_table(dbo)',但它没有帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

您还需要定义delays_table

这样的事情:

namespace public_transportaion.Models //or ORM
{
    [Table("delays_table", Schema = "YourSchemaHere")]
    public class delays_table
    {
        [Key]
        public string agency_name { get; set; },
        public int COUNT { get; set; }
    }
}

答案 1 :(得分:0)

这听起来像是在这里发生的两件事之一:连接字符串指向错误的数据库的问题或者您的SQL查询无法识别delayed_table实际上是一个表:

检查连接字符串

您的数据上下文的连接字符串指向的数据库与您期望的数据库不同(请考虑检查web.config文件以确保其正确):

<connectionStrings>
    <add name="DefaultConnection" connectionString="{check-me}" providerName="System.Data.SqlClient" />
</connectionStrings>

您将主要检查您的服务器和数据库名称是否正确:

Data Source={your-database-server};Initial Catalog={your-database-name};

明确表示您正在使用表格

您可以尝试将表名明确地包装在方括号中,以让SQL知道您的目标是表:

// The [delays_table] will explicitly indicate you are targeting a table with that name
var query = "SELECT agency_name, COUNT(*) FROM [delays_table] WHERE late_type = 'miss' GROUP BY agency_name";