1

当我在数据库中添加一列时,如何更新我的 DB.Context。

这是我的 Context.cs

 modelBuilder.Entity<SensorModbusRtusetting>(entity =>
        {
            entity.ToTable("SensorModbusRTUSetting");

            entity.Property(e => e.Id).HasColumnName("id");

            entity.Property(e => e.Baudrate).HasColumnName("baudrate");

            entity.Property(e => e.Channel)
                .IsRequired()
                .HasColumnType("jsonb")
                .HasColumnName("channel");

            entity.Property(e => e.Comport)
                .IsRequired()
                .HasColumnName("comport");

            entity.Property(e => e.Pid).HasColumnName("pid");

            entity.Property(e => e.Slaveid).HasColumnName("slaveid");

            entity.Property(e => e.Nane).HasColumnName("nane");

这是我的模型

    namespace Sensormanager2V2
{
    public partial class SensorModbusRtusetting
    {
        public string Comport { get; set; }
        public int Baudrate { get; set; }
        public string Channel { get; set; }
        public int Slaveid { get; set; }
        public int Pid { get; set; }
        public long Id { get; set; }
        public string Nane { get; set; }
        
    }
}

这是我的控制器

    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 Sensormanager2V2;

namespace Sensormanager2V2.Controllers
{
    public class SensorModbusRtusettingsController : Controller
    {
        private readonly postgresContext _context;

        public SensorModbusRtusettingsController(postgresContext context)
        {
            _context = context;
        }

        // GET: SensorModbusRtusettings
        public async Task<IActionResult> Index()
        {
            return View(await _context.SensorModbusRtusettings.ToListAsync());
        }

        // GET: SensorModbusRtusettings/Details/5
        public async Task<IActionResult> Details(long? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var sensorModbusRtusetting = await _context.SensorModbusRtusettings
                .FirstOrDefaultAsync(m => m.Id == id);
            if (sensorModbusRtusetting == null)
            {
                return NotFound();
            }

            return View(sensorModbusRtusetting);
        }

        // GET: SensorModbusRtusettings/Create
        public IActionResult Create()
        {
            return View();
        }

        // POST: SensorModbusRtusettings/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("Comport,Baudrate,Channel,Slaveid,Pid,Id,Name")] SensorModbusRtusetting sensorModbusRtusetting)
        {
            if (ModelState.IsValid)
            {
                _context.Add(sensorModbusRtusetting);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(sensorModbusRtusetting);
        }

        // GET: SensorModbusRtusettings/Edit/5
        public async Task<IActionResult> Edit(long? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var sensorModbusRtusetting = await _context.SensorModbusRtusettings.FindAsync(id);
            if (sensorModbusRtusetting == null)
            {
                return NotFound();
            }
            return View(sensorModbusRtusetting);
        }

        // POST: SensorModbusRtusettings/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(long id, [Bind("Comport,Baudrate,Channel,Slaveid,Pid,Id,Name")] SensorModbusRtusetting sensorModbusRtusetting)
        {
            if (id != sensorModbusRtusetting.Id)
            {
                return NotFound();
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(sensorModbusRtusetting);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SensorModbusRtusettingExists(sensorModbusRtusetting.Id))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
                return RedirectToAction(nameof(Index));
            }
            return View(sensorModbusRtusetting);
        }

        // GET: SensorModbusRtusettings/Delete/5
        public async Task<IActionResult> Delete(long? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var sensorModbusRtusetting = await _context.SensorModbusRtusettings
                .FirstOrDefaultAsync(m => m.Id == id);
            if (sensorModbusRtusetting == null)
            {
                return NotFound();
            }

            return View(sensorModbusRtusetting);
        }

        // POST: SensorModbusRtusettings/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> DeleteConfirmed(long id)
        {
            var sensorModbusRtusetting = await _context.SensorModbusRtusettings.FindAsync(id);
            _context.SensorModbusRtusettings.Remove(sensorModbusRtusetting);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }

        private bool SensorModbusRtusettingExists(long id)
        {
            return _context.SensorModbusRtusettings.Any(e => e.Id == id);
        }
    }
}
4

1 回答 1

0

如果您更新数据库中表的结构,您需要确保您的更改传播到数据模型、视图和控制器。

对于本教程,您将在 Student 表中添加一个新列来记录学生的中间名。要添加此列,请打开数据库项目,然后打开 Student.sql 文件。通过设计器或 T-SQL 代码,添加一个名为 MiddleName 的列,它是一个 NVARCHAR(50) 并允许 NULL 值。

通过启动数据库项目(或 F5)将此更改部署到本地数据库。新字段被添加到表中。如果在 SQL Server 对象资源管理器中看不到它,请单击窗格中的刷新按钮。

在此处输入图像描述

新列存在于数据库表中,但当前不存在于数据模型类中。您必须更新模型以包含新列。在 Models 文件夹中,打开 ContosoModel.edmx 文件以显示模型图。请注意,Student 模型不包含 MiddleName 属性。右键单击设计图面上的任意位置,然后选择从数据库更新模型。

在更新向导中,选择刷新选项卡,然后选择表 > dbo > Student。单击完成。

更新过程完成后,数据库图包含新的 MiddleName 属性。保存 ContosoModel.edmx 文件。您必须保存此文件,以便将新属性传播到 Student.cs 类。您现在已经更新了数据库和模型。

构建解决方案。

于 2021-08-25T09:30:41.297 回答