Linq to Sql, System.Приведение исключений недопустимо



Я пытаюсь сопоставить класс из 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; }

}
}


Я называю этот класс из другого класса:



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

}


В основном, я получаю следующее:




База {Система.SystemException} = {"указанное приведение недопустимо."}




Это означает, что приведение недопустимо



Обновление
Моя база данных выглядит так:



>



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


StackTrace:




[InvalidCastException: указанное приведение недопустимо.]

Система.Данные.В sqlclient.SqlBuffer.get_Decimal() +274

Система.Данные.В sqlclient.Класс sqldatareader.GetDecimal (Int32 i) +44

Read_Product(ObjectMaterializer 1 ) +1088

System.Data.Linq.SqlClient.ObjectReader
2.MoveNext() +32

Система.Коллекции.Родовой.Список 1..ctor(IEnumerable1 коллекция) +406
Система.Линк.Перечислимый.ToList(IEnumerable 1 source) +58

SportsStore.Controllers.ProductController.List() in
D:Call.of.Duty.Modern.Warfare.3-RELOADEDSportsStoreSportsStoreSportsStoreControllersProductController.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

Система.Сеть.В 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
1 Продолжение) +436

Система.Сеть.В MVC.c_ DisplayClassf.b _c()
+ 61 система.Сеть.В MVC.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, IList 1 filters, ActionDescriptor actionDescriptor,
IDictionary
2 параметра) +305

Система.Сеть.В MVC.ControllerActionInvoker.InvokeAction (ControllerContext
controllerContext, String actionName) +830

Система.Сеть.В MVC.Контроллер.ExecuteCore () +136

Система.Сеть.В MVC.База управления.Execute (RequestContext объекта RequestContext)
+ 111 система.Сеть.В MVC.База управления.Система.Сеть.В MVC.IController.Execute (RequestContext
requestContext) +39

Система.Сеть.В MVC.c_ DisplayClass8.b_4() +65

Система.Сеть.В MVC.Асинхронный.c_ DisplayClass1.b_0() +44

Система.Сеть.В MVC.Асинхронный. c _ _ DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult
_) +42 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +141 Система.Сеть.В MVC.Асинхронный.AsyncResultWrapper.Конец (IAsyncResult asyncResult,
Метка объекта) +54

Система.Сеть.В MVC.Асинхронный.AsyncResultWrapper.Конец (IAsyncResult asyncResult,
Метка объекта) +40

Система.Сеть.В MVC.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
Система +52.Сеть.В MVC.MvcHandler.Система.Сеть.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
результат) +38

Система.Сеть.CallHandlerExecutionStep.Система.Сеть.HttpApplication.IExecutionStep.Выполнять()
+ 8966925 система.Сеть.HttpApplication.ExecuteStep (iexecutionstep step, Boolean& completedSynchronously) +184


640   2  

2 ответов:

В сообщении об ошибке указано, что значение столбца Price не может быть преобразовано в decimal.

Необходимо убедиться, что таблица базы данных имеет правильный тип столбца для столбца Price и содержит допустимые данные.

Кроме того, если ваш столбец в базе данных допускает нулевые значения, вам нужно сопоставить его с нулевым десятичным числом с помощью decimal? Price { get; set; }

У вас есть столбец, определенный как [Column]public decimal Price { get; set; }. Вы уверены, что это действительно подходящий тип данных для данных в базе данных? - могут ли данные в базе данных быть Varchar, или разрешить нули?

Comments

    Ничего не найдено.