我正在创建Edit HTTP Post Action Method,当我按下Edit按钮时出现错误
Cannot insert explicit value for identity column in table 'Garancija' when IDENTITY_INSERT is set to OFF.
当我检查表[dbo].[Garancija]
时,我发现Identity已启用
CREATE TABLE [dbo].[Garancija] (
[ProduzenaGarancijaID] INT IDENTITY (1, 1) NOT NULL,
[Broj_Police] INT NOT NULL,
[GeneralniUgovor] INT NOT NULL,
[ImeVlasnika] NVARCHAR (MAX) NULL,
[Adresa_Ulica] NVARCHAR (MAX) NULL,
[Adresa_Broj] NVARCHAR (MAX) NULL,
[Adresa_PBroj] NVARCHAR (MAX) NULL,
[Adresa_Mjesto] NVARCHAR (MAX) NULL,
[JMBG] NVARCHAR (MAX) NULL,
[VrsteVozilaID] INT NOT NULL,
[MarkaVozilaID] INT NOT NULL,
[ModelVozilaID] INT NOT NULL,
[Sasija] NVARCHAR (MAX) NULL,
[Snaga] NVARCHAR (MAX) NULL,
[Zapremina] NVARCHAR (MAX) NULL,
[VrstaMjenjacaID] INT NOT NULL,
[Is4x4] BIT NULL,
[Predjeni_Kilometri] NVARCHAR (MAX) NULL,
[Kupovna_Vrijednost] NVARCHAR (MAX) NULL,
[Namjena] NVARCHAR (MAX) NULL,
[GorivoID] INT NOT NULL,
[DatumPrveRegistracije] NVARCHAR (MAX) NULL,
[DatumPrveProdaje] NVARCHAR (MAX) NULL,
[DatumKupovineVozila] NVARCHAR (MAX) NULL,
[DatumPocetkaGarancije] NVARCHAR (MAX) NULL,
[DatumIstekaGarancije] NVARCHAR (MAX) NULL,
[TrajanjeGarancije] NVARCHAR (MAX) NULL,
[LimitPokrica] NVARCHAR (MAX) NULL,
[OgranicenjeKm] FLOAT (53) NULL,
[ProduktID] INT NOT NULL,
[ProgramPokrica] NVARCHAR (MAX) NULL,
[CjenovnikID] INT NOT NULL,
[Cijena] FLOAT (53) NOT NULL,
[DatumUnosta] NVARCHAR (MAX) NULL,
[DatumPromjene] NVARCHAR (MAX) NULL,
[BrojPotvrde] INT NOT NULL,
CONSTRAINT [PK_Garancija] PRIMARY KEY CLUSTERED ([ProduzenaGarancijaID] ASC),
CONSTRAINT [FK_Garancija_VrsteMjenjaca_VrstaMjenjacaID] FOREIGN KEY ([VrstaMjenjacaID]) REFERENCES [dbo].[VrsteMjenjaca] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Garancija_VrsteVozila_VrsteVozilaID] FOREIGN KEY ([VrsteVozilaID]) REFERENCES [dbo].[VrsteVozila] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Garancija_Cjenovnik_CjenovnikID] FOREIGN KEY ([CjenovnikID]) REFERENCES [dbo].[Cjenovnik] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Garancija_Gorivo_GorivoID] FOREIGN KEY ([GorivoID]) REFERENCES [dbo].[Gorivo] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Garancija_MarkeVozila_MarkaVozilaID] FOREIGN KEY ([MarkaVozilaID]) REFERENCES [dbo].[MarkeVozila] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Garancija_Modeli_ModelVozilaID] FOREIGN KEY ([ModelVozilaID]) REFERENCES [dbo].[Modeli] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Garancija_Produkti_ProduktID] FOREIGN KEY ([ProduktID]) REFERENCES [dbo].[Produkti] ([Id]) ON DELETE CASCADE
);
到目前为止,我所做的是尝试调试应用程序,但编译器未进入方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TriglavOsiguranje.Data;
using TriglavOsiguranje.Models.ViewModels;
using TriglavOsiguranje.Models;
using Microsoft.AspNetCore.Mvc.Rendering;
using System.Net;
namespace TriglavOsiguranje.Areas.Uposlenik.Controllers
{
[Area("Uposlenik")]
public class GarancijaController : Controller
{
private ApplicationDbContext _db;
[BindProperty]
public GarancijaViewModel GarancijaVM { get; set; }
public GarancijaController(ApplicationDbContext db)
{
_db = db;
GarancijaVM = new GarancijaViewModel()
{
Gorivo = _db.Gorivo.ToList(),
Cijenovnik = _db.Cjenovnik.ToList(),
MarkeVozila = _db.MarkeVozila.ToList(),
ModeliVozila = _db.Modeli.ToList(),
Produkt = _db.Produkti.ToList(),
VrstaMjenjaca = _db.VrsteMjenjaca.ToList(),
VrstaVozila = _db.VrsteVozila.ToList(),
Garancija = new ProduzenaGarancija()
};
}
public async Task<IActionResult> Index()
{
var garancija = _db.Garancija.Include(m => m.MarkaVozila).Include(m => m.ModelVozila).Include(m => m.VrsteVozila);
return View(await garancija.ToListAsync());
}
//GET : Product Create
public IActionResult Create()
{
return View(GarancijaVM);
}
[HttpPost, ActionName("Create")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreatePOST()
{
if (ModelState.IsValid)
{
_db.Garancija.Add(GarancijaVM.Garancija);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(GarancijaVM);
}
//GET Edit
public async Task<IActionResult> Edit(int? Id)
{
if (Id == null)
{
return NotFound();
}
GarancijaVM.Garancija = await _db.Garancija.Include(m => m.Gorivo)
.Include(m => m.MarkaVozila).Include(m => m.ModelVozila)
.Include(m => m.Produkt).Include(m => m.VrstaMjenjaca)
.Include(m => m.VrsteVozila).Include(m => m.Cjenovnik)
.SingleOrDefaultAsync(m => m.ProduzenaGarancijaID == Id);
return GarancijaVM.Garancija == null ? NotFound() : (IActionResult)View(GarancijaVM);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, ProduzenaGarancija garancija)
{
if (id != garancija.ProduzenaGarancijaID)
{
return NotFound();
}
if (ModelState.IsValid)
{
_db.Update(garancija);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(garancija);
}
//GET: Details Garancija
public async Task<IActionResult> Details(int? Id)
{
if (Id == null)
{
return NotFound();
}
GarancijaVM.Garancija = await _db.Garancija.Include(m => m.Gorivo)
.Include(m => m.Gorivo).Include(m => m.MarkaVozila).Include(m => m.ModelVozila)
.Include(m => m.Produkt).Include(m => m.VrstaMjenjaca).Include(m => m.VrsteVozila)
.SingleOrDefaultAsync(m => m.ProduzenaGarancijaID == Id);
if (GarancijaVM.Garancija == null)
{
return NotFound();
}
return View(GarancijaVM);
}
//GET: Delete GarancijaVM
public async Task<IActionResult> Delete(int? Id)
{
if (Id == null)
{
return NotFound();
}
GarancijaVM.Garancija = await _db.Garancija.Include(m => m.Gorivo)
.Include(m => m.Gorivo).Include(m => m.MarkaVozila).Include(m => m.ModelVozila)
.Include(m => m.Produkt).Include(m => m.VrstaMjenjaca).Include(m => m.VrsteVozila)
.SingleOrDefaultAsync(m => m.ProduzenaGarancijaID == Id);
if (GarancijaVM.Garancija == null)
{
return NotFound();
}
return View(GarancijaVM);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id)
{
ProduzenaGarancija produzena = await _db.Garancija.FindAsync(id);
if (produzena == null)
{
return NotFound();
}
else
{
_db.Garancija.Remove(produzena);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
}
}
第二次认为我做的是我的模型,但我没有纠正错误
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
这是我的模特
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
namespace TriglavOsiguranje.Models
{
public class ProduzenaGarancija
{
/*Podaci o vlasniku*/
[Key]
public int ProduzenaGarancijaID { get; set; }
public int Broj_Police { get; set; }
public int GeneralniUgovor { get; set; }
public string ImeVlasnika { get; set; }
public string Adresa_Ulica { get; set; }
public string Adresa_Broj { get; set; }
public string Adresa_PBroj { get; set; }
public string Adresa_Mjesto { get; set; }
public string JMBG { get; set; }
/* Podaci o vozilu */
[Display(Name ="Vrste Vozila")]
public int VrsteVozilaID { get; set; }
[ForeignKey("VrsteVozilaID")]
public virtual VrstaVozila VrsteVozila { get; set; }
[Display(Name = "Marka vozila")]
public int MarkaVozilaID { get; set; }
[ForeignKey("MarkaVozilaID")]
public virtual MarkeVozila MarkaVozila { get; set; }
[Display(Name = "Model vozila")]
public int ModelVozilaID { get; set; }
[ForeignKey("ModelVozilaID")]
public virtual ModeliVozila ModelVozila { get; set; }
public string Sasija { get; set; }
public string Snaga { get; set; }
public string Zapremina { get; set; }
[Display(Name = "Vrsta mjenjaca")]
public int VrstaMjenjacaID { get; set; }
[ForeignKey("VrstaMjenjacaID")]
public virtual VrstaMjenjaca VrstaMjenjaca { get; set; }
public bool Is4x4 { get; set; }
public string Predjeni_Kilometri { get; set; }
public string Kupovna_Vrijednost { get; set; }
public string Namjena { get; set; }
[Display(Name = "Vrsta goriva")]
public int GorivoID { get; set; }
[ForeignKey("GorivoID")]
public virtual Gorivo Gorivo { get; set; }
/* Podaci o garanciji */
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumPrveRegistracije { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumPrveProdaje { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumKupovineVozila { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumPocetkaGarancije { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumIstekaGarancije { get; set; }
public string TrajanjeGarancije { get; set; }
public string LimitPokrica { get; set; }
public double OgranicenjeKm { get; set; }
[Display(Name = "Produkt/Nacin prodaje")]
public int ProduktID { get; set; }
[ForeignKey("ProduktID")]
public virtual Produkt Produkt { get; set; }
public string ProgramPokrica { get; set; }
[Display(Name = "Cjenovnik / Zapremina Vozila")]
public int CjenovnikID { get; set; }
[ForeignKey("CjenovnikID")]
public virtual Cjenovnik Cjenovnik { get; set; }
public double Cijena { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumUnosta { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string DatumPromjene { get; set; }
public int BrojPotvrde { get; set; }
}
}
我也在使用VM绑定db的下拉列表
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TriglavOsiguranje.Models.ViewModels
{
public class GarancijaViewModel
{
public ProduzenaGarancija Garancija { get; set; }
public IEnumerable<Cjenovnik> Cijenovnik { get; set; }
public IEnumerable<Gorivo> Gorivo { get; set; }
public IEnumerable<MarkeVozila> MarkeVozila { get; set; }
public IEnumerable<ModeliVozila> ModeliVozila { get; set; }
public IEnumerable<Produkt> Produkt { get; set; }
public IEnumerable<VrstaMjenjaca> VrstaMjenjaca { get; set; }
public IEnumerable<VrstaVozila> VrstaVozila { get; set; }
}
}
我也在这里检查了此链接
我不知道此错误来自何处,但我认为它与数据库有关。 几次我更新数据库并检查Is Identity = true,但不能解决我的问题 任何建议或评论可能是什么问题?
编辑
Project.Areas.Uposlenik.Controllers.GarancijaController.Create(ProduzenaGarancija garancija) in GarancijaController.cs
-
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(ProduzenaGarancija garancija)
{
if (ModelState.IsValid)
{
_db.Garancija.Add(garancija);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(garancija);
}
答案 0 :(得分:1)
public static void click(By... by){
int count=by.length;
for(By locator:by){
if(isElementPresent(locator)) {
getDriver().findElement(locator).click();
break;
}
count--;
}
if(count<0)
assertTrue(false,"Count not find element.");
}
public static boolean isElementPresent(By selector)
{
try {
driver.findElement(selector);
return true;
}
catch (Exception e) {
return false;
}
}
答案 1 :(得分:1)
几天检查保留应用程序后,我发现视图中出现错误
<div class="form-group text-center">
<input type="submit" class="btn btn-primary" asp-asp-route-id="@Model.Garancija.Id" value="Izmijeni" />
<a asp-action="Index" class="btn btn-success">Nazad</a>
</div>
出于某种原因asp-asp-route-id="@Model.Garancija.Id"
,我检查我是否有双asp-asp
,这就是为什么我会出错
谢谢你们! ! !
答案 2 :(得分:0)
当“ IDENTITY_INSERT”设置为“ OFF”时,我们无法将数据明确插入身份列。
为了将数据插入标识列,我们需要将该表的“ IDENTITY_INSERT”设置为“ ON”。
此外,在将数据显式插入到identity列中时,我们需要记住该列也将是表的Primary Key
。
这意味着null
和duplicate
的值都不允许显式插入到该列。
如果使用Entity Framework,则可以尝试以下两个选项将数据显式插入到Identity列中:
_db.Update(garancija)
方法中调用Edit
的地方_db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Garancija ON");
_db.Update(garancija);
_db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Garancija OFF");
await _db.SaveChangesAsync();
Key
列,即模型类中的ProduzenaGarancijaID
,您可以设置属性[DatabaseGenerated(DatabaseGeneratedOption.None)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ProduzenaGarancijaID { get; set; }