Linq to Sql,System.Exception强制转换无效

Dmi*_*iyd 4 sql linq asp.net-mvc-2

我试图将一个类从SQL映射到一个linq集合,但我失败了..

我有这门课:

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; }

    }
}
Run Code Online (Sandbox Code Playgroud)

我从另一个班级打电话给那个班级:

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; }
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

基本上,我得到这个:

base {System.SystemException} = {"指定的演员表无效."}

这意味着演员表无效

更新 我的数据库看起来像这样:

>

 **ProductID  int (primary key) Name  
     nvarchar(100) Description  
 nvarchar(500) Category  
 nvarchar(50) Price  int**
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

[InvalidCastException的:指定的转换无效.]
System.Data.SqlClient.SqlBuffer.get_Decimal()274
System.Data.SqlClient.SqlDataReader.GetDecimal(的Int32ⅰ)44
Read_Product(ObjectMaterializer 2.MoveNext()32 系统. Collections.Generic.List 1集合)406 System.Linq.Enumerable.ToList(IEnumerable的2个参数)409 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary的1续)436 的System.Web. MVC.<> C_ DisplayClassf.b _c()61个System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext,IList的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 Syst em.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.End(IAsyncResult的asyncResult,对象标签)40 System.Web.Mvc. MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+52 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+38 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+ 8966925 System .Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)+1841 ) +1088
System.Data.Linq.SqlClient.ObjectReader

1..ctor(IEnumerable1 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 parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func

1 filters, ActionDescriptor actionDescriptor, IDictionary





1.<BeginSynchronous>b__7(IAsyncResult _) +42 System.Web.Mvc.Async.WrappedAsyncResult


Wou*_*ort 5

您的错误消息指出该Price列的值无法转换为a decimal.

您需要确保数据库表具有正确的列类型Price,并且包含有效数据.

此外,如果数据库中的列允许NULL值,则需要将其映射为可为空的小数 decimal? Price { get; set; }