2012-01-09 28 views
4

我試圖從SQL類映射到LINQ集合,但我失敗了..LINQ到SQL中,System.Exception的轉換無效

我有這個類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Linq; 
using System.Data.Linq.Mapping; 

namespace SportsStore.Entities 
{ 
    [Table(Name = "Products")] 
    public class Product 
    { 
     [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
     public int ProductID { get; set; } 

     [Column]public string Name { get; set; } 
     [Column]public string Description { get; set; } 
     [Column]public `int` Price { get; set; } 
     [Column]public string Category { get; set; } 

    } 
} 

我稱之爲類從另一個類:

using SportsStore.Abstract; 
using SportsStore.Entities; 
using System.Data.Linq; 
using System.Linq; 

    namespace SportsStore.Concrete 
    { 
     public class SqlProductsRepository : IProductRepository 
     { 
      private Table<Product> productsTable; 

      public SqlProductsRepository(string connnectionString) 
      { 
       productsTable = (new DataContext(connnectionString)).GetTable<Product>(); 
      } 

      public IQueryable<Product> Products 
      { 
       get { return productsTable; } 
      } 
     } 

    } 

基本上,我得到這個:

基地{System.SystemException} = { 「指定的轉換無效。」}

這意味着中投無效

更新 我的數據庫看起來像這樣:

>

**ProductID int (primary key) Name 
    nvarchar(100) Description 
nvarchar(500) Category 
nvarchar(50) Price int** 

堆棧跟蹤:

[InvalidCastException的:指定的轉換無效。]
System.Data.SqlClient.SqlBuffer.get_Decimal()274
System.Data.SqlClient.SqlDataReader.GetDecimal(的Int32ⅰ)44
Read_Product(ObjectMaterializer 1) +1088
System.Data.Linq.SqlClient.ObjectReader
2.MoveNext()32
System.Collections.Generic.List 1..ctor(IEnumerable 1集合)406 System.Linq.Enumerable.ToList(IEnumerable的1 source) +58
SportsStore.Controllers.ProductController.List() in D:\Call.of.Duty.Modern.Warfare.3-RELOADED\SportsStore\SportsStore\SportsStore\Controllers\ProductController.cs:28 lambda_method(Closure , ControllerBase , Object[]) +96
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +51
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2參數)409
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDict離子2 parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1續)+436
System.Web.Mvc。 <> C_ DisplayClassf.b _c() 61 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext,IList的1 filters, ActionDescriptor actionDescriptor, IDictionary 2參數)305
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext ,字符串actionName)830
System.Web.Mvc.Controller.ExecuteCore()136
System.Web.Mvc.ControllerBase.Execute(RequestContext的RequestContext的) 111 System.Web.Mvc.ControllerBase.System.Web .Mvc.IController.Execute(RequestContext requestContext)+39
System.Web.Mvc。 <> c_ DisplayClass8.b _4()+65
System.Web.Mvc.Async。 <> c_ DisplayClass1.b _0()+44
System.Web.Mvc.Async。 <> c__DisplayClass8​​1.End()141 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult的asyncResult, 對象標籤)54
System.Web.Mvc.Async.AsyncResultWrapper。端(IAsyncResult的asyncResult, 對象標籤)40
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult的asyncResult) 52 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult的 結果)+ 38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 8966925 System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾& completedSynchronously)184

+0

什麼是'productsTable'的類型,什麼是異常的細節(完整的堆棧跟蹤等)? – 2012-01-09 12:11:42

+0

我將返回的產品錶轉換成列表..使用toList ..稍後 – 2012-01-09 12:14:05

+0

當我進入代碼productsTable不顯示任何結果返回..它給我例外的結果 – 2012-01-09 12:16:48

回答

4

你的錯誤消息狀態Price列的值不能轉換爲decimal

您需要確保您的數據庫表具有Price列的正確列類型,並且它包含有效數據。

另外,如果你的數據庫中的列允許空值,你需要將它與decimal? Price { get; set; }

+0

我改變了列類型爲int和產品類爲int太..仍然我得到這個異常與同樣的消息 – 2012-01-09 12:22:02

+0

但現在用GetInt()而不是GetDecimal()錯誤?該欄可以爲空嗎? – 2012-01-09 12:23:20

+0

它給了我相同的異常原因,我有一個視覺工作室修改/保存我的新變化的問題..我正在處理該 – 2012-01-09 12:35:24

3

映射到一個可空小數你得定義爲[Column]public decimal Price { get; set; }列。你確定這實際上是數據庫中數據的合適的數據類型嗎? - 數據庫中的數據可能是Varchar,還是允許空值?

+0

我再次改變它:十進制(16,2)和屬性[Column] public decimal Price {get;組; } ....應該是正確的 – 2012-01-09 12:29:27

+0

我想我知道問題所在......我必須去配置並允許數據庫保存 – 2012-01-09 12:34:44