在培訓中遇到的問題 在此總結 避免以后遇到相同問題要找半天才能解決
【菜鳥 解決問題】
1、在查詢數據時轉換Json字符串時出現數據類型錯誤 "其他信息: DataSet 不支持 System.Nullable<>。"
【錯誤】table.Columns.Add(prop.Name, prop.PropertyType);【標紅的就是報錯數據類型】
【解決方法】把上面 那句換為:table.Columns.Add(prop.Name); 可以解決此問題
/// <summary> /// 創建表 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static DataTable CreateTable<T>() { 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); }