【发布时间】:2014-12-18 07:32:42
【问题描述】:
我正在尝试将值插入到本地数据库的表中。我为此使用了 EntityFramework。 我的代码非常简单直接,但是当我尝试向表中插入数据时出现此错误。
Cannot insert explicit value for identity column in table 'PUserDataTable' when IDENTITY_INSERT is set to OFF.
更新: 我现在使用以下代码收到此错误。
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace SampleDatabase.Controllers
{
public class PUserDataTableController : Controller
{
PUserDataTableContext db = new PUserDataTableContext();
public ActionResult Index()
{
return View(db.PUserDataTables.ToList());
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(PUserDataTable userdata)
{
if(ModelState.IsValid)
{
db.PUserDataTables.Add(userdata);
try
{
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
}
return View(userdata);
}
}
}
这是我的模型:
namespace SampleDatabase
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
public partial class PUserDataTable
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Nullable<int> Id { get; set; }
public string DeviceID { get; set; }
public string TimeSpent { get; set; }
public Nullable<int> NumPages { get; set; }
public string History { get; set; }
public string FinalPage { get; set; }
}
}
这是我创建表格的方式。
CREATE TABLE [dbo].[PUserDataTable] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[DeviceID] VARCHAR (50) NULL,
[TimeSpent] VARCHAR (50) NULL,
[NumPages] INT NULL,
[History] VARCHAR (MAX) NULL,
[FinalPage] VARCHAR (50) NULL,
CONSTRAINT [PK_PUserDataTable] PRIMARY KEY CLUSTERED ([Id] ASC)
);
如何解决此错误?任何帮助将不胜感激。
【问题讨论】:
-
IDENTITY_INSERT 的默认设置是关闭的,这是有充分理由的。标识列旨在由数据库填充,而不是由调用者填充。除非 MySQL EF 提供程序存在问题,否则 EF 应该可以很好地处理这个问题。您可以发布该表的 EF 数据模型的代码吗?
-
这正是我的问题。我没有强制将任何数据添加到“Id”字段中,但它仍在抱怨。
-
你有没有用调试器进入代码,看看
userdata在碰到控制器时包含什么? -
'userdata' 对象还包含一个设置为 0 的 'Id' 字段,试图插入到表中。这很奇怪,因为我没有在“Id”字段中添加任何内容。有没有办法告诉程序忽略“Id”字段,因为它应该随着每次插入方法调用自动递增。
-
int的默认值为 0,因此即使您没有明确地为它分配值,它仍然有一个 (0)。
标签: c# asp.net-mvc database entity-framework visual-studio-2012