Linq to Sql, System.Exception is invalid

I am trying to map a class from SQL to linq library, but I fail.

I have 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 am calling this 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 the following:

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

This means that the cast is invalid.

My database update looks like this:

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

Stacktrace:

[InvalidCastException: The specified listing is not valid.]
System.Data.SqlClient.SqlBuffer.get_Decimal () +274
System.Data.SqlClient.SqlDataReader.GetDecimal (Int32 i) +44
Read_Product (ObjectMaterializer 1 ) +1088
System.Data.Linq.SqlClient.ObjectReader
1 ) +1088
System.Data.Linq.SqlClient.ObjectReader
1 ) +1088
System.Data.Linq.SqlClient.ObjectReader
2.MoveNext () +32
System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) +406 System.Linq.Enumerable.ToList (parameters 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
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
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, IDictionary 2 parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
2 parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
2 parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 continued) +
System.Web.Mvc <. > C_DisplayClassf.b_c () +61 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (ControllerContext controllerContext, IList 1 filters, ActionDescriptor actionDescriptor, IDictionary 2 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__DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult _) +42 System.Web.Mvc.Async.WrappedAsyncResult 1.End () +141 System.Web.Mvc.Async.AsyncResultWrapper.End (IAsyncResult asyncResult Objectync 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 (step IExecutionStep, Boolean & completed synchronously) +184

+4
source share
2 answers

The error message indicates that the value for the Price column cannot be converted to decimal .

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

Also, if your column in the database is nullable, do you need to map it to a decimal point with a null value using decimal? Price { get; set; } decimal? Price { get; set; }

+4
source

You have a column defined as [Column]public decimal Price { get; set; } [Column]public decimal Price { get; set; } [Column]public decimal Price { get; set; } . Are you sure this is really the right data type for the data in the database? - can the data in the database be Varchar or allow zeros?

+3
source

Source: https://habr.com/ru/post/1390031/


All Articles