我是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)',但它没有帮助。
谢谢。
答案 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";