当我尝试使用以下命令在数据库中添加新条目时,遇到以下异常错误:
db.patient_visit.Add(pv);
db.SaveChanges();
project.dll 中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:project.Models.tableName:字段pvid必须是字符串或数组类型,最大长度为“20”。
在此之前,我的模型自动且最初设置如下,因为我使用现有数据库进行了代码优先迁移。
[Key]
[StringLength(20)]
public string pvid { get; set; }
按理来说,看起来已经在范围之内了。但为了尝试,我尝试将其更改为下面的代码,并进行了添加迁移。然后,在 Up() 方法中,它是空的。这是否意味着修改不被识别?因为当我再次尝试运行该项目时,遇到了与上面相同的错误。
[Key]
[MaxLength(20), MinLength(12)]
public string pvid { get; set; }
然后,当我在查询中设置断点时,我看到:
内部异常:空
消息:数据读取器与指定的“project.Models.tableName”不兼容。 “columnName”类型的成员在数据读取器中没有具有相同名称的相应列。
我的查询有问题吗?
ChargeVM objDetails = new ChargeVM();
var query3 = db.Database.SqlQuery<patient_visit>("SELECT MAX(CAST(SUBSTRING(pvid, 3, 10) AS int)) FROM patient_visit");
if (query3 != null)
{
objDetails.pvid = query3.ToString();
objDetails.pvid += 1;
objDetails.pvid = "PV" + objDetails.pvid;
}
patient_visit pv = new patient_visit()
{
pvid = objDetails.pvid,
paid = paid
};
db.patient_visit.Add(pv);
我为 db.SaveChanges() 添加了一个 try catch 来捕获任何异常,并且在“throw raise”行,弹出了我在第一段中提到的异常错误。
try
{
db.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
Exception raise = dbEx;
foreach (DbEntityValidationResult validationErrors in dbEx.EntityValidationErrors)
{
foreach (DbValidationError 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;
}
实际上,我最近刚刚切换到 C#,并将代码从 vb.net 转换为 C#。我想知道这是否是语法问题或其他问题,因为之前使用 vb.net 运行得很顺利。有人可以帮我指点一下吗?我对此很陌生。