ASP.NET MVC 在本地计算机上工作正常,但一旦部署到 Azure 应用服务上,与数据库写入操作相关的页面不会显示(向数据库添加数据的页面和更新数据库中数据的页面)。
以下是一个插入数据的控制器的代码示例:
public ActionResult Create()
{
ViewBag.nbEnt = db.Entrepots.Where(e => e.active == true).Count();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,entrName,entrAdres,LocaliteId,entrFreePlace,entrBusyPlace,entrTotalPlace,active")] Entrepot entrepot)
{
if (ModelState.IsValid)
{
entrepot.active = true;
db.Entrepots.Add(entrepot);
db.SaveChanges();
TempData["action"] = "add";
return RedirectToAction("Index");
}
ViewBag.LocaliteId = new SelectList(db.Localites, "Id", "locTown", entrepot.LocaliteId);
return View(entrepot);
}
以下是更新示例:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Entrepot entrepot = db.Entrepots.Find(id);
if (entrepot == null)
{
return HttpNotFound();
}
return View(entrepot);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,entrName,entrAdres,LocaliteId,entrFreePlace,entrBusyPlace,entrTotalPlace,active")] Entrepot entrepot)
{
if (ModelState.IsValid)
{
db.Entry(entrepot).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.LocaliteId = new SelectList(db.Localites, "Id", "locTown", entrepot.LocaliteId);
return View(entrepot);
}
对此有什么线索或建议吗?
谢谢。
我尝试过链接到 Visual Studio 的调试器,但这对我没有帮助。
我尝试了简单的 ASP。 NET MVC Framework 4.8 与 SQL Server 并将其部署到 Azure。
确保部署到 Azure 时正确迁移数据库架构。如果您使用实体框架代码优先迁移,请确保您的迁移已正确应用到 Azure SQL 数据库。
确保您的 Azure SQL 数据库已正确配置并可通过 Azure 应用服务进行访问。
这是我的控制器,用于创建和更新数据库中的数据。
EntrepotsController:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using WebApplication4.Models;
namespace WebApplication4.Controllers
{
public class EntrepotsController : Controller
{
private EntrepotDbContext db = new EntrepotDbContext();
public ActionResult Index()
{
return View(db.Entrepots.ToList());
}
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Entrepot entrepot = db.Entrepots.Find(id);
if (entrepot == null)
{
return HttpNotFound();
}
return View(entrepot);
}
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,entrName,entrAdres,LocaliteId,active")] Entrepot entrepot)
{
if (ModelState.IsValid)
{
db.Entrepots.Add(entrepot);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(entrepot);
}
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Entrepot entrepot = db.Entrepots.Find(id);
if (entrepot == null)
{
return HttpNotFound();
}
return View(entrepot);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,entrName,entrAdres,LocaliteId,active")] Entrepot entrepot)
{
if (ModelState.IsValid)
{
db.Entry(entrepot).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(entrepot);
}
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Entrepot entrepot = db.Entrepots.Find(id);
if (entrepot == null)
{
return HttpNotFound();
}
return View(entrepot);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Entrepot entrepot = db.Entrepots.Find(id);
db.Entrepots.Remove(entrepot);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
}
下面是我的 Azure SQL Server 连接字符串。
Web.Config:
<connectionStrings>
<add name="ConnectionString" connectionString="Server=tcp:<ServerName>.database.windows.net,1433;Initial Catalog=<DataBaseName>;Persist Security Info=False;User ID=<UserName>;Password=<Password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
</connectionStrings>
本地输出:
在将 Web 应用程序部署到 Azure 之前,如果要使用本地 SQL 数据库连接字符串生成迁移,请删除这些迁移并使用 Azure SQL 数据库连接字符串生成新迁移。
Azure 应用服务输出:
下面是我的 Azure Sql 数据库输出: