C# SaveChanges()上的验证错误
我的Asp.net mvc web应用程序中有以下操作方法:-C# SaveChanges()上的验证错误,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我的Asp.net mvc web应用程序中有以下操作方法:- [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(SDJoin sdj, FormCollection formValues) { Try { //code goes here repository.InsertOrUpdateSD(sdj.StorageDevice, User.Identity.Name
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(SDJoin sdj, FormCollection formValues)
{
Try
{
//code goes here
repository.InsertOrUpdateSD(sdj.StorageDevice, User.Identity.Name, assetid);
repository.Save();
}
catch (Exception ex)
{
//code goes here
}
PopulateViewBagData();
return View(sdj);
}
它调用以下方法:-
public void InsertOrUpdateSD(TMSStorageDevice sd, string username, long assetid)
{
var resource = entities.Resources.AsNoTracking().SingleOrDefault(a => a.RESOURCEID == assetid);
if (sd.TMSStorageDeviceID == default(int))
{
// New entity
int technologyypeID = GetTechnologyTypeID("Storage Device");
Technology technology = new Technology
{
IsDeleted = true,
IsCompleted = false,
TypeID = technologyypeID,
Tag = "SD" + GetTagMaximumeNumber2(technologyypeID).ToString(),
StartDate = DateTime.Now,
IT360ID = assetid
};
InsertOrUpdateTechnology(technology);
Save();
sd.TMSStorageDeviceID = technology.TechnologyID;
tms.TMSStorageDevices.Add(sd);
}
}
我的模型课如下:-
public partial class TMSStorageDevice
{
public int TMSStorageDeviceID { get; set; }
public string Name { get; set; }
public Nullable<decimal> size { get; set; }
public int RackID { get; set; }
public string CustomerName { get; set; }
public string Comment { get; set; }
public byte[] timestamp { get; set; }
public virtual Technology Technology { get; set; }
public virtual TMSRack TMSRack { get; set; }
}
有谁能告诉我哪里出了问题,因为我反复检查了我的代码,每件事情都应该正常工作?
谢谢您没有显示
Save()
方法,但是如果您可以向其中添加这样的代码,您将得到一个异常,其中包含您要查找的所有详细信息
try
{
_context.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
Exception raise = dbEx;
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
string message = string.Format("{0}:{1}",
validationErrors.Entry.Entity.ToString(),
validationError.ErrorMessage);
// raise a new exception nesting
// the current instance as InnerException
raise = new InvalidOperationException(message, raise);
}
}
throw raise;
}
我知道这个问题现在已经过时了,但我希望有人也会觉得这个问题有用
虽然这是一个老帖子,但这种方法可以更富有成效 试试这样的
try
{
pcontext.SaveChanges();
}
catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
{
Console.WriteLine(ex.InnerException);
}
catch (System.Data.Entity.Core.EntityCommandCompilationException ex)
{
Console.WriteLine(ex.InnerException);
}
catch (System.Data.Entity.Core.UpdateException ex)
{
Console.WriteLine(ex.InnerException);
}
catch (System.Data.Entity.Infrastructure.DbUpdateException ex) //DbContext
{
Console.WriteLine(ex.InnerException);
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException);
throw;
}
您是否“查看了
EntityValidationErrors
属性以了解详细信息”?它显示了一个错误,其描述为“System.Data.Entity.Validation.DbEntityValidationResult}”查看ValidationErrors
属性应该可以确切地告诉您问题所在。没有ValidationErrors部分。在方法InsertOrUpdateSD
中捕获对象DbEntityValidationException
。这会帮助你找到验证错误。谢谢兄弟。今天帮我省了很多时间。如果没有你的回答,那就不容易了。我通常不会写评论只是为了说声谢谢,但这次我会破例。非常感谢你!你救了我一个大麻烦:)@qujckI第二个是@KorayDurudogan说的。这非常有帮助。非常感谢!!简直就是第二次用这个!非常好的回答!!伟大的工作,否则我将无法找到千年虫!!赞成他的想法。解决了我的问题
try
{
pcontext.SaveChanges();
}
catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
{
Console.WriteLine(ex.InnerException);
}
catch (System.Data.Entity.Core.EntityCommandCompilationException ex)
{
Console.WriteLine(ex.InnerException);
}
catch (System.Data.Entity.Core.UpdateException ex)
{
Console.WriteLine(ex.InnerException);
}
catch (System.Data.Entity.Infrastructure.DbUpdateException ex) //DbContext
{
Console.WriteLine(ex.InnerException);
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException);
throw;
}