指定的强制转换不是有效的C#实体框架
本文关键字:有效 实体 框架 转换 | 更新日期: 2023-09-27 18:00:46
嗨,我一直在获取此指定强制转换在我的代码中无效,但当我连接到备份数据库时,我没有获取指定强制转换无效错误。我不知道发生了什么事。
同样,这段代码在一个数据库上运行得很好,并在另一个数据库中给了我错误。
我的控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Linq.SqlClient;
using System.Text.RegularExpressions;
using MvcPaging;
using lookups.Models;
using lookups.Helpers;
namespace lookups.Controllers
{
public class MPController : Controller
{
// GET: /Lookups/
public LpAppsDataDataContext db = new LpAppsDataDataContext();
public const int DefaultPageSize = 30;
//get MP Data
if (countSpace == 1 && v.Count(char.IsLetter) > 3)
{
if (SqlString.CheckStringForComma(v))
{
mpq = db.mps
.Where(c => c.NAME_LAST.ToLower().Contains(SqlString.GetSplitCommaString(v.ToLower(), 0))).OrderBy(c => c.NAME_LAST).ThenBy(f => f.NAME_FIRST);
}
else
{
mpq = db.mps
.Where(c => c.NAME_LAST.ToLower().Contains(SqlString.GetSplitString(v.ToLower(), 1)) || c.NAME_LAST.Contains(SqlString.GetSplitString(v.ToLower(), 0))).OrderBy(c => c.NAME_LAST).ThenBy(f => f.NAME_FIRST);
}
}
else
{
mpq = db.mps
.Where(c => c.NAME_L
ViewBag.count = mpq.Count();
}
}
else { ViewBag.count = 0; }
@ViewBag.col = "Unclaimed Pensions";
return View(mpq.ToPagedList(currentPageIndex, DefaultPageSize));
}
}
}
我的型号
[global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.mp")]
public partial class mp
{
private string _COMPANY;
private string _STATE;
private System.Nullable<System.DateTime> _DOPT;
private string _SP_STATE;
private string _PRT_NAME;
private string _NAME_LAST;
private string _NAME_FIRST;
private string _LASTADDRESS;
private System.Nullable<double> _ID;
private System.Nullable<System.DateTime> _DATE;
private string _PLAN_TYPE;
public mp()
{
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_COMPANY", DbType = "NVarChar(255)")]
public string COMPANY
{
get
{
return this._COMPANY;
}
set
{
if ((this._COMPANY != value))
{
this._COMPANY = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_STATE", DbType = "NVarChar(255)")]
public string STATE
{
get
{
return this._STATE;
}
set
{
if ((this._STATE != value))
{
this._STATE = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_DOPT", DbType = "DateTime")]
public System.Nullable<System.DateTime> DOPT
{
get
{
return this._DOPT;
}
set
{
if ((this._DOPT != value))
{
this._DOPT = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_SP_STATE", DbType = "NVarChar(255)")]
public string SP_STATE
{
get
{
return this._SP_STATE;
}
set
{
if ((this._SP_STATE != value))
{
this._SP_STATE = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_PRT_NAME", DbType = "NVarChar(255)")]
public string PRT_NAME
{
get
{
return this._PRT_NAME;
}
set
{
if ((this._PRT_NAME != value))
{
this._PRT_NAME = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_NAME_LAST", DbType = "NVarChar(255)")]
public string NAME_LAST
{
get
{
return this._NAME_LAST;
}
set
{
if ((this._NAME_LAST != value))
{
this._NAME_LAST = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_NAME_FIRST", DbType = "NVarChar(255)")]
public string NAME_FIRST
{
get
{
return this._NAME_FIRST;
}
set
{
if ((this._NAME_FIRST != value))
{
this._NAME_FIRST = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_LASTADDRESS", DbType = "NVarChar(255)")]
public string LASTADDRESS
{
get
{
return this._LASTADDRESS;
}
set
{
if ((this._LASTADDRESS != value))
{
this._LASTADDRESS = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_ID", DbType = "Float")]
public System.Nullable<double> ID
{
get
{
return this._ID;
}
set
{
if ((this._ID != value))
{
this._ID = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_DATE", DbType = "DateTime")]
public System.Nullable<System.DateTime> DATE
{
get
{
return this._DATE;
}
set
{
if ((this._DATE != value))
{
this._DATE = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_PLAN_TYPE", DbType = "NVarChar(255)")]
public string PLAN_TYPE
{
get
{
return this._PLAN_TYPE;
}
set
{
if ((this._PLAN_TYPE != value))
{
this._PLAN_TYPE = value;
}
}
}
}
StackTrace
Line 257: @ViewBag.col = "Unclaimed Pensions";
Line 258:
Line 259: return View(mpq.ToPagedList(currentPageIndex, DefaultPageSize));
Line 260: }
Line 261:
Stack Trace:
[InvalidCastException: Specified cast is not valid.]
System.Data.SqlClient.SqlBuffer.get_Double() +51
System.Data.SqlClient.SqlDataReader.GetDouble(Int32 i) +62
Read_mp(ObjectMaterializer`1 ) +2057
System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +32
System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) +392
System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection) +10
MvcPaging.PagedList`1..ctor(IQueryable`1 source, Int32 index, Int32 pageSize, Nullable`1 totalCount) +2014
MvcPaging.PagingExtensions.ToPagedList(IQueryable`1 source, Int32 pageIndex, Int32 pageSize, Nullable`1 totalCount) +134
lookups.Controllers.MPController.Mp(Nullable`1 page, String sortOrder) in
将备份数据库与不起作用的数据库进行比较,特别是ID列。确保它们与类型(浮点)和可为NULL的能力匹配(NULL)。
抛出的异常表明其中一列(类型为"double")与模型不匹配。
"mp"表上的ID列是模型中唯一的双列。
在SQL Server Developer 2019中,我使用sys
表创建了一个SQL脚本,以确定SQL Server认为每列的类型。
select
obj.name as [Table]
, col.name as [Column]
, case
when type.[precision] > 0 and type.scale = 0 then type.name + '(' + CONVERT(nvarchar(8), type.precision) + ')'
when type.[precision] > 0 and type.scale > 0 then type.name + '(' + CONVERT(nvarchar(8), type.precision) + ',' + CONVERT(nvarchar(8), type.scale) + ')'
else type.name end as [FullType]
from
sys.objects as [obj]
inner join sys.columns as [col]
on obj.object_id = col.object_id
inner JOIN sys.types as [type]
on col.system_type_id = type.system_type_id
where
obj.type = N'U'
然后,我可以在通用表表达式(CTE)或其他类似结构中使用脚本来过滤特定列。