project.Models.tableName:字段pvid必须是字符串或数组类型,最大长度为“20”

当我尝试在数据库中添加新条目时遇到以下exception错误:

db.patient_visit.Add(pv); db.SaveChanges(); 

project.dll中出现“System.InvalidOperationException”类型的exception,但未在用户代码中处理

附加信息:project.Models.tableName:字段pvid必须是字符串或数组类型,最大长度为“20”。

在此之前,我的模型自动设置如下,因为我使用现有数据库进行了代码优先迁移。

 [Key] [StringLength(20)] public string pvid { get; set; } 

从逻辑上讲,它看起来已经在范围内了。 但是为了尝试,我尝试将其更改为下面的代码,并进行了添加迁移。 然后,在Up()方法中,它为空。 这是否意味着修改无法识别? 因为当我再次尝试运行项目时,我遇到了与上面相同的错误。

 [Key] [MaxLength(20), MinLength(12)] public string pvid { get; set; } 

然后,当我在我的查询中放置断点时,我看到:

InnerException:null

消息:数据读取器与指定的“project.Models.tableName”不兼容。 “columnName”类型的成员在数据读取器中没有相应的具有相同名称的列。

我的查询有问题吗?

  ChargeVM objDetails = new ChargeVM(); var query3 = db.Database.SqlQuery("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以捕获任何exception,并且在“throw raise”行中,弹出第一段中提到的exception错误。

  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运行顺利。 有人可以帮我指点一下吗? 我是新手。