ASP.NET MVC 5 插入语句冲突 FK
Posted
技术标签:
【中文标题】ASP.NET MVC 5 插入语句冲突 FK【英文标题】:ASP.NET MVC 5 Insert statement conflict FK 【发布时间】:2021-06-11 19:24:24 【问题描述】:我构建一个简单的项目只是为了自学,我有一个小问题。 我正在使用 Visual Studio 和实体框架。
我构建了一个 ASP.NET MVC 5 应用程序,其中包含 CRUD 功能。 在数据库中是 2 个表之间的连接,例如 on screenshot
来自 CarController 的 HTTP POST 波纹管
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(Car car)
if (!ModelState.IsValid)
var viewModel = new CarFormViewModel()
Cars = car,
CarTypeModels = _context.CarTypeModels.ToList()
;
return View("CarForm", viewModel);
if (car.Id == 0)
_context.Cars.Add(car);
else
var customerInDb = _context.Cars.Single(c => c.Id == car.Id);
customerInDb.Name = car.Name;
customerInDb.HorsePower = car.HorsePower;
customerInDb.LinkToImage = car.LinkToImage;
customerInDb.CarTypeModelId = car.CarTypeModelId;
_context.SaveChanges();
return RedirectToAction("Index", "Car");
我收到一个错误error
Db.CarTypeModel ->
CREATE TABLE [dbo].[CarTypeModels] (
[Id] TINYINT NOT NULL,
[Name] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_dbo.CarTypeModels] PRIMARY KEY CLUSTERED ([Id] ASC));
db.Car ->
CREATE TABLE [dbo].[Cars] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (255) NULL,
[HorsePower] INT NOT NULL,
[LinkToImage] NVARCHAR (MAX) NULL,
[CarTypeModelId] TINYINT DEFAULT ((0)) NOT NULL,
CONSTRAINT [PK_dbo.Cars] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_dbo.Cars_dbo.CarTypeModels_CarTypeModelId] FOREIGN KEY ([CarTypeModelId]) REFERENCES [dbo].[CarTypeModels] ([Id]) ON DELETE CASCADE); GO CREATE NONCLUSTERED INDEX [IX_CarTypeModelId] ON [dbo].[Cars]([CarTypeModelId] ASC);
以及使用 CarTypeModelId 的 CarForm 代码
<div class="form-group">
@html.LabelFor(m => m.Cars.CarTypeModelId)
@Html.DropDownListFor(m => m.Cars.CarTypeModelId, new SelectList(Model.CarTypeModels, "ID", "Name"), "Select car type", new @class = "form-control" )
@Html.ValidationMessageFor(m => m.Cars.CarTypeModelId)
</div>
我有 API 连接并且它工作正常。我认为问题出在 CarController 但我真的不知道在哪里......
//POST /api/cars
[HttpPost]
public IHttpActionResult CreateCar(CarDto carDto)
if (!ModelState.IsValid)
return BadRequest();
var car = Mapper.Map<CarDto, Car>(carDto);
_context.Cars.Add(car);
_context.SaveChanges();
carDto.Id = car.Id;
return Created(new Uri(Request.RequestUri + "/" + car.Id), carDto);
【问题讨论】:
【参考方案1】:我认为您的下拉列表选择无法正常工作并返回 car.CarTypeModelId= 0。尝试通过将“ID”替换为“Id”来修复下拉列表:
@Html.DropDownListFor(m => m.Cars.CarTypeModelId, new SelectList(Model.CarTypeModels, "Id", "Name"), "Select car type", new @class = "form-control" )
【讨论】:
我试过这个,不是这个,但我找到了解决方案。在我在保存功能中使用的 CarFormView 中,小错误。在 DB 中,我有表名 Car 和 CarFormView。公共类 CarFormViewModel public IEnumerable以上是关于ASP.NET MVC 5 插入语句冲突 FK的主要内容,如果未能解决你的问题,请参考以下文章
如何遍历 MultiSelectList 发布的值并将每个值插入 ASP.Net MVC 5 中的新数据库行?
Asp.net core Identity “INSERT 语句与 FOREIGN KEY 约束冲突”
SqlException:INSERT 语句与 FOREIGN KEY 约束冲突 - asp.net-core
使用 jQuery 和 ASP.NET MVC 将集合插入模型,创建插件