Linq To SQL - Specified cast is not valid - SingleOrDefault()
I am trying to do the following...
Request request = (
from r in db.Requests
where r.Status == "Processing" && r.Locked == false
select r
).SingleOrDefault();
It is throwing the following exception...
Message:
Specified cast is not valid.
StackTrace:
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execut开发者_Python百科e[S](Expression expression)
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
at GDRequestProcessor.Worker.GetNextRequest()
Can anyone help me? Thanks in advance!
schema details can be found below...
[Table(Name="dbo.Requests")]
public partial class Request : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private int _RequestId;
private string _LoanNumber;
private string _ClientCode;
private int _RequestTypeId;
private bool _HasParameters;
private string _Status;
private bool _Locked;
private string _ErrorMessage;
private int _ReferenceId;
private EntitySet<RequestParameter> _RequestParameters;
private EntityRef<RequestType> _RequestType;
#region Extensibility Method Definitions
partial void OnLoaded();
partial void OnValidate(System.Data.Linq.ChangeAction action);
partial void OnCreated();
partial void OnRequestIdChanging(int value);
partial void OnRequestIdChanged();
partial void OnLoanNumberChanging(string value);
partial void OnLoanNumberChanged();
partial void OnClientCodeChanging(string value);
partial void OnClientCodeChanged();
partial void OnRequestTypeIdChanging(int value);
partial void OnRequestTypeIdChanged();
partial void OnHasParametersChanging(bool value);
partial void OnHasParametersChanged();
partial void OnStatusChanging(string value);
partial void OnStatusChanged();
partial void OnLockedChanging(bool value);
partial void OnLockedChanged();
partial void OnErrorMessageChanging(string value);
partial void OnErrorMessageChanged();
partial void OnReferenceIdChanging(int value);
partial void OnReferenceIdChanged();
#endregion
public Request()
{
this._RequestParameters = new EntitySet<RequestParameter>(new Action<RequestParameter>(this.attach_RequestParameters), new Action<RequestParameter>(this.detach_RequestParameters));
this._RequestType = default(EntityRef<RequestType>);
OnCreated();
}
[Column(Storage="_RequestId", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int RequestId
{
get
{
return this._RequestId;
}
set
{
if ((this._RequestId != value))
{
this.OnRequestIdChanging(value);
this.SendPropertyChanging();
this._RequestId = value;
this.SendPropertyChanged("RequestId");
this.OnRequestIdChanged();
}
}
}
[Column(Storage="_LoanNumber", DbType="VarChar(50) NOT NULL", CanBeNull=false)]
public string LoanNumber
{
get
{
return this._LoanNumber;
}
set
{
if ((this._LoanNumber != value))
{
this.OnLoanNumberChanging(value);
this.SendPropertyChanging();
this._LoanNumber = value;
this.SendPropertyChanged("LoanNumber");
this.OnLoanNumberChanged();
}
}
}
[Column(Storage="_ClientCode", DbType="VarChar(50) NOT NULL", CanBeNull=false)]
public string ClientCode
{
get
{
return this._ClientCode;
}
set
{
if ((this._ClientCode != value))
{
this.OnClientCodeChanging(value);
this.SendPropertyChanging();
this._ClientCode = value;
this.SendPropertyChanged("ClientCode");
this.OnClientCodeChanged();
}
}
}
[Column(Storage="_RequestTypeId", DbType="Int NOT NULL")]
public int RequestTypeId
{
get
{
return this._RequestTypeId;
}
set
{
if ((this._RequestTypeId != value))
{
if (this._RequestType.HasLoadedOrAssignedValue)
{
throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
}
this.OnRequestTypeIdChanging(value);
this.SendPropertyChanging();
this._RequestTypeId = value;
this.SendPropertyChanged("RequestTypeId");
this.OnRequestTypeIdChanged();
}
}
}
[Column(Storage="_HasParameters", DbType="Bit NOT NULL")]
public bool HasParameters
{
get
{
return this._HasParameters;
}
set
{
if ((this._HasParameters != value))
{
this.OnHasParametersChanging(value);
this.SendPropertyChanging();
this._HasParameters = value;
this.SendPropertyChanged("HasParameters");
this.OnHasParametersChanged();
}
}
}
[Column(Storage="_Status", DbType="VarChar(50) NOT NULL", CanBeNull=false)]
public string Status
{
get
{
return this._Status;
}
set
{
if ((this._Status != value))
{
this.OnStatusChanging(value);
this.SendPropertyChanging();
this._Status = value;
this.SendPropertyChanged("Status");
this.OnStatusChanged();
}
}
}
[Column(Storage="_Locked", DbType="Bit NOT NULL")]
public bool Locked
{
get
{
return this._Locked;
}
set
{
if ((this._Locked != value))
{
this.OnLockedChanging(value);
this.SendPropertyChanging();
this._Locked = value;
this.SendPropertyChanged("Locked");
this.OnLockedChanged();
}
}
}
[Column(Storage="_ErrorMessage", DbType="VarChar(255)")]
public string ErrorMessage
{
get
{
return this._ErrorMessage;
}
set
{
if ((this._ErrorMessage != value))
{
this.OnErrorMessageChanging(value);
this.SendPropertyChanging();
this._ErrorMessage = value;
this.SendPropertyChanged("ErrorMessage");
this.OnErrorMessageChanged();
}
}
}
[Column(Storage="_ReferenceId", DbType="Int NOT NULL")]
public int ReferenceId
{
get
{
return this._ReferenceId;
}
set
{
if ((this._ReferenceId != value))
{
this.OnReferenceIdChanging(value);
this.SendPropertyChanging();
this._ReferenceId = value;
this.SendPropertyChanged("ReferenceId");
this.OnReferenceIdChanged();
}
}
}
You need to ensure that your table schema matches your .dbml diagram and associated properties.
Perhaps the easiest way to do this is to delete the table in question from your dbml diagram. Then, from your server explorer, drag it back to the diagram.
Note: This will not always work with views. Sometimes, you must run exec sp_refreshview MyViewName
from SSMS before re-adding your view to the DBML.
you should write : .SingleOrDefault<Request>()
.
Request request = (
from r in db.Requests
where r.Status == "Processing" && r.Locked == false
select r
)
.SingleOrDefault<Request>();
Just remove the relevant table from your dbml file and re-add it. if this didnt work, try removing the associations from the dbml file.
精彩评论