SqlException:在 C# (VISUAL STUDIO) 和 sql server 中构建网站时出现无效的对象名称错误
Posted
技术标签:
【中文标题】SqlException:在 C# (VISUAL STUDIO) 和 sql server 中构建网站时出现无效的对象名称错误【英文标题】:SqlException: Invalid object name ERROR WHILE BUILDING WEBSITE IN C# (VISUAL STUDIO) and sql server 【发布时间】:2021-08-06 23:48:56 【问题描述】:WebDev 新手, 试图建立一个网站,让农民可以从网上商店订购药品。
在一个解决方案中,创建了 2 个项目 Medicine.Model(这里从 sqlsever 调用了数据库)和 Medicine.WEB(上面的项目在此处添加为 PROJECT REFERENCE) p>
3 个模型
农民
using System;
using System.Collections.Generic;
#nullable disable
namespace Medicine.Model.Models
public partial class Farmer
public Farmer()
Orders = new HashSet<Order>();
public string FarmerName get; set;
public string Location get; set;
public int Quantity get; set;
public int FarmerId get; set;
public virtual ICollection<Order> Orders get; set;
商店
public partial class Store
public Store()
Orders = new HashSet<Order>();
public int StoreId get; set;
public string StoreName get; set;
public string StoreLocation get; set;
public virtual ICollection<Order> Orders get; set;
订单(存储订单详细信息并将上述内容链接到表格)
public partial class Order
public int FarmerId get; set;
public int StoreId get; set;
public string Status get; set;
public string DateOfOrder get; set;
public int OrderId get; set;
public virtual Farmer Farmer get; set;
public virtual Store Store get; set;
在共享布局视图中进行更改以添加 3 个控制器。
分别制作了3个控制器
这是共享布局代码
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Farmers" asp-action="Index">Farmers</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Orders" asp-action="Index">Orders</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Store" asp-action="Index">Stores</a>
</li>
好的,所以问题是当我点击主页时网站运行正常,但是当我点击网站中的农民时,它显示以下错误。
处理请求时发生未处理的异常。 SqlException:无效的对象名称“Farmer”。 Microsoft.Data.SqlClient.SqlCommand+c.b__169_0(任务结果)
//错误也在这里显示红线
FarmersController.cs 中的Medicine.WEB.Controllers.FarmersController.Index()
return View(await _context.Farmers.ToListAsync());
所以我在这里添加整个 Farmer Controller,
农民控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Medicine.Model.Models;
namespace Medicine.WEB.Controllers
public class FarmersController : Controller
private readonly MedicinesDBContext _context;
public FarmersController(MedicinesDBContext context)
_context = context;
// GET: Farmers
public async Task<IActionResult> Index()
return View(await _context.Farmers.ToListAsync());
// GET: Farmers/Details/5
public async Task<IActionResult> Details(int? id)
if (id == null)
return NotFound();
var farmer = await _context.Farmers
.FirstOrDefaultAsync(m => m.FarmerId == id);
if (farmer == null)
return NotFound();
return View(farmer);
// GET: Farmers/Create
public IActionResult Create()
return View();
// POST: Farmers/Create
// To protect from overposting attacks, enable the specific properties you want to bind to.
// For more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("FarmerName,Location,Quantity,FarmerId")] Farmer farmer)
if (ModelState.IsValid)
_context.Add(farmer);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
return View(farmer);
// GET: Farmers/Edit/5
public async Task<IActionResult> Edit(int? id)
if (id == null)
return NotFound();
var farmer = await _context.Farmers.FindAsync(id);
if (farmer == null)
return NotFound();
return View(farmer);
// POST: Farmers/Edit/5
// To protect from overposting attacks, enable the specific properties you want to bind to.
// For more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("FarmerName,Location,Quantity,FarmerId")] Farmer farmer)
if (id != farmer.FarmerId)
return NotFound();
if (ModelState.IsValid)
try
_context.Update(farmer);
await _context.SaveChangesAsync();
catch (DbUpdateConcurrencyException)
if (!FarmerExists(farmer.FarmerId))
return NotFound();
else
throw;
return RedirectToAction(nameof(Index));
return View(farmer);
// GET: Farmers/Delete/5
public async Task<IActionResult> Delete(int? id)
if (id == null)
return NotFound();
var farmer = await _context.Farmers
.FirstOrDefaultAsync(m => m.FarmerId == id);
if (farmer == null)
return NotFound();
return View(farmer);
// POST: Farmers/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
var farmer = await _context.Farmers.FindAsync(id);
_context.Farmers.Remove(farmer);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
private bool FarmerExists(int id)
return _context.Farmers.Any(e => e.FarmerId == id);
谁能告诉我我的错误在哪里以及如何改正?
【问题讨论】:
创建MedicinesDBContext
不会自动创建表。您需要使用 DbContext.Database.EnsureCreated 或 Migrations 或手动创建目标表。
是的,我已经创建了已经使用 sql server 创建的表
您是如何创建表格的?如果您不使用 ef 迁移和 ef 数据库更新,EF 可能看不到它们。
【参考方案1】:
知道了,看到模型是在数据库(sql server)的代码中制作的,所以 NuGet 包控制台没有错误,错误出现在我们在 appsetting.json 中输入的连接字符串中,谢谢
【讨论】:
以上是关于SqlException:在 C# (VISUAL STUDIO) 和 sql server 中构建网站时出现无效的对象名称错误的主要内容,如果未能解决你的问题,请参考以下文章
SqlException:INSERT 语句与使用 EF 代码优先 C# 的 FOREIGN KEY 约束冲突
System.Data.SqlClient.SqlException C#
为啥visual studio 2013安装后,没有c#模板?