2012-01-09 65 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