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(ObjectMaterializer1 ) +10882.MoveNext() +32
System.Data.Linq.SqlClient.ObjectReader
Система.Коллекции.Родовой.Список1..ctor(IEnumerable1 коллекция) +406
Система.Линк.Перечислимый.ToList(IEnumerable1 source) +582 параметра) +409
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
Система.Сеть.В MVC.ControllerActionInvoker.InvokeActionMethod (ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary21 Продолжение) +436
parameters) +52
System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
+127 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter
filter, ActionExecutingContext preContext, Func
Система.Сеть.В MVC.c_ DisplayClassf.b _c()
+ 61 система.Сеть.В MVC.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, IList1 filters, ActionDescriptor actionDescriptor,2 параметра) +305
IDictionary
Система.Сеть.В 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 _ _ DisplayClass81.<BeginSynchronous>b__7(IAsyncResult1.End() +141 Система.Сеть.В MVC.Асинхронный.AsyncResultWrapper.Конец (IAsyncResult asyncResult,
_) +42 System.Web.Mvc.Async.WrappedAsyncResult
Метка объекта) +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
2 ответов:
В сообщении об ошибке указано, что значение столбца
Priceне может быть преобразовано вdecimal.Необходимо убедиться, что таблица базы данных имеет правильный тип столбца для столбца
Priceи содержит допустимые данные.Кроме того, если ваш столбец в базе данных допускает нулевые значения, вам нужно сопоставить его с нулевым десятичным числом с помощью
decimal? Price { get; set; }
У вас есть столбец, определенный как
[Column]public decimal Price { get; set; }. Вы уверены, что это действительно подходящий тип данных для данных в базе данных? - могут ли данные в базе данных бытьVarchar, или разрешить нули?
Comments