Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linq to Sql, System.Exception cast is not valid

I am trying to map a class from SQL to a linq collection, But I fail..

I have got this class:

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

    }
}

I call that class from another 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; }
            }
        }

    }

Basically, I get this:

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

This implies the cast is invalid

update My database looks like that:

>

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

StackTrace:

[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

like image 723
Dmitry Makovetskiyd Avatar asked Feb 22 '23 21:02

Dmitry Makovetskiyd


2 Answers

Your error message states that the value for the Price column cannot be converted to a decimal.

You need to make sure that your database table has the correct column type for the Price column and that it contains valid data.

Also, if your column in the database allows NULL values, you need to map it to a nullable decimal with decimal? Price { get; set; }

like image 143
Wouter de Kort Avatar answered Feb 24 '23 12:02

Wouter de Kort


You've got a column defined as [Column]public decimal Price { get; set; }. Are you sure this is actually a suitable datatype for the data in the database? - could the data in the database be Varchar, or allow nulls?

like image 25
Jon Egerton Avatar answered Feb 24 '23 12:02

Jon Egerton