Asp.net核心mvc迁移数据库
Asp.net core mvc migration database
当我在数据库中添加一列时,如何更新我的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);
}
}
}
如果您更新数据库中 table 的结构,您需要确保您的更改传播到数据模型、视图和控制器。
对于本教程,您将向 Student 添加一个新列 table 以记录学生的中间名。要添加此列,请打开数据库项目,然后打开 Student.sql 文件。通过设计器或 T-SQL 代码,添加一个名为 MiddleName 的列,它是一个 NVARCHAR(50) 并允许 NULL 值。
通过启动数据库项目(或 F5)将此更改部署到本地数据库。新字段添加到 table。如果您在 SQL 服务器对象资源管理器中没有看到它,请单击窗格中的刷新按钮。
新列存在于数据库 table 中,但当前不存在于数据模型 class 中。您必须更新模型以包含您的新列。在 Models 文件夹中,打开 ContosoModel.edmx 文件以显示模型图。请注意,Student 模型不包含 MiddleName 属性。右键单击设计图面上的任意位置,然后 select 从数据库更新模型。
在更新向导中,select 刷新选项卡,然后 select 表 > dbo > 学生。单击“完成”。
更新过程完成后,数据库图表包含新的 MiddleName 属性。保存 ContosoModel.edmx 文件。您必须保存此文件,新 属性 才能传播到 Student.cs class。您现在已经更新了数据库和模型。
构建解决方案。
当我在数据库中添加一列时,如何更新我的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);
}
}
}
如果您更新数据库中 table 的结构,您需要确保您的更改传播到数据模型、视图和控制器。
对于本教程,您将向 Student 添加一个新列 table 以记录学生的中间名。要添加此列,请打开数据库项目,然后打开 Student.sql 文件。通过设计器或 T-SQL 代码,添加一个名为 MiddleName 的列,它是一个 NVARCHAR(50) 并允许 NULL 值。
通过启动数据库项目(或 F5)将此更改部署到本地数据库。新字段添加到 table。如果您在 SQL 服务器对象资源管理器中没有看到它,请单击窗格中的刷新按钮。
新列存在于数据库 table 中,但当前不存在于数据模型 class 中。您必须更新模型以包含您的新列。在 Models 文件夹中,打开 ContosoModel.edmx 文件以显示模型图。请注意,Student 模型不包含 MiddleName 属性。右键单击设计图面上的任意位置,然后 select 从数据库更新模型。
在更新向导中,select 刷新选项卡,然后 select 表 > dbo > 学生。单击“完成”。
更新过程完成后,数据库图表包含新的 MiddleName 属性。保存 ContosoModel.edmx 文件。您必须保存此文件,新 属性 才能传播到 Student.cs class。您现在已经更新了数据库和模型。
构建解决方案。