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 未处理,C# [关闭]

SqlException:INSERT 语句与使用 EF 代码优先 C# 的 FOREIGN KEY 约束冲突

System.Data.SqlClient.SqlException C#

为啥visual studio 2013安装后,没有c#模板?

在 C# visual2005 中使用 XmlAttribute() 检索

c#在visual studio开发环境下设计一个闹钟 小界面程序