sql - Linq 到 Sql,System.Exception 转换无效

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

    }
}

我从另一个类(class)调用该类(class):
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; }
            }
        }

    }

基本上,我得到了这个:

base {System.SystemException} = {"Specified cast is not valid."}



这意味着类型转换无效

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

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

堆栈跟踪:

[InvalidCastException: Specified cast is not valid.]
System.Data.SqlClient.SqlBuffer.get_Decimal() +274
System.Data.SqlClient.SqlDataReader.GetDecimal(Int32 i) +44
Read_Product(ObjectMaterializer1 ) +1088
System.Data.Linq.SqlClient.ObjectReader
2.MoveNext() +32
System.Collections.Generic.List1..ctor(IEnumerable1 collection) +406 System.Linq.Enumerable.ToList(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) +409
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 continuation) +436
System.Web.Mvc.<>c_DisplayClassf.b_c() +61 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary2 parameters) +305
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String 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__DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) +42 System.Web.Mvc.Async.WrappedAsyncResult1.End() +141 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +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) +184

最佳答案

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

您需要确保您的数据库表具有适用于 Price 的正确列类型。列并且它包含有效数据。

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

关于sql - Linq 到 Sql,System.Exception 转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788188/

相关文章:

jquery - 按日期对对象数组进行排序

asp.net-mvc - ASP.NET MVC - 捕获所有路由和默认路由

mysql - 获取每组前n个结果

sql - 事务中 GO 命令的奇怪行为

c# - 基于字符串构建 TreeView

jquery - 在 jsTree 中选择项目时访问 ASP.NET MVC 服务器端数据

sql-server - SQL Server 2008 R2 缺少参数

php - 从数据库中获取数据时html网格显示错误

mysql - 在mysql中使用日期类型字段优化查询

c# - 我应该什么时候处理数据上下文