在培训中遇到的问题 在此总结 避免以后遇到相同问题要找半天才能解决
【菜鸟 解决问题】
1、在查询数据时转换Json字符串时出现数据类型错误 "其他信息: DataSet 不支持 System.Nullable<>。"
【错误】table.Columns.Add(prop.Name, prop.PropertyType);【标红的就是报错数据类型】
【解决方法】把上面 那句换为:table.Columns.Add(prop.Name); 可以解决此问题
////// 创建表 /// /// /// public static DataTable CreateTable () { Type entityType = typeof(T); DataTable table = new DataTable(entityType.Name); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType); foreach (PropertyDescriptor prop in properties) { //table.Columns.Add(prop.Name);//换为这个后能解决错误问题 table.Columns.Add(prop.Name, prop.PropertyType);//在查询数据时转换Json字符串时出现数据类型错误 "其他信息: DataSet 不支持 System.Nullable<>。" } return table; }
2、在添加数据时报错:“对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性” 报这样错误时我们都不知道是哪个字段报错。可以使用 “DbEntityValidationException”来查看是哪个字段的错误!
【大神截图】原址:http://www.cnblogs.com/zhangliming/p/2675111.html
但是,按照他的提示 “See 'EntityValidationErrors' property for more details.” 去 Exception 中查看,却只能看到
并不能看到具体的是那个属性为什么验证不通过,也许不少人都遇到这种情况。
这里给大家介绍一个Exception类,让我们能够轻松的知道具体的哪一个字段出了什么问题。
那就是 System.Data.Entity.Validation.DbEntityValidationException,相信代码都知道怎么写了,最简单的就是
try
{
// 写数据库
}
catch (DbEntityValidationException dbEx)
{
}
在 dbEx 里面中我们就可以看到
这样子我们就能看到 EntityValidationErrors 所有的 ValidationErrors 的详细信息了。
3、删除数据时报错:此操作的参数类型“Edm.Int32”和“Edm.String”不兼容。 附近 WHERE 谓词, 列 1, 列 80.错误
某个主键值的类型与实体中定义的类型不匹配。有关详细信息,请参阅内部异常。
解决方法:红色位置转换参数
public string Delete(FormCollection collection) { try { // TODO: Add delete logic here string role = collection["students"]; string[] Idarr = role.Split(','); for (int i = 0; i < Idarr.Length; i++) { UnitOfWork.RoleInfoRepositort.Delete(int.Parse(Idarr[i])); UnitOfWork.SaveChang(); } return "ok"; } catch (Exception ee) { throw ee.InnerException; } }
4、
传入字典的模型项的类型为“System.Linq.Enumerable+WhereSelectEnumerableIterator`2[HotelShow.SQLDAL.Hotel+OrderRow,HotelShow.Model.Order]”,但此字典需要类型“System.Collections.Generic.IEnumerable`1[HotelShow.Model.Customer]”的模型项。
public ActionResult Details(string id)
{
var list = UnitOfWork.EmployeeInfoRepository.GetList(e => e.EmployeeId == id);//这个位置报错
return View(list);
}
因为是根据Id查询的数据,必要的在后面single()一下!
public ActionResult Details(string id)
{
var list = UnitOfWork.EmployeeInfoRepository.GetList(e => e.EmployeeId == id).Single();//改正后的数据
return View(list);
}