没有太多关于此错误的信息,但我没有在此特定代码中使用任何转换,所以我很丢失。
var dsn = Request.ServerVariables["HTTP_HOST"].Split('.').First();
using (var ctx = new SharedDataContext("switchcurrent"))
{
var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN == dsn);
if (dbDsn == null)
{
Session["CurrentDsn"] = "SwitchCurrent";
}
else
{
Session["CurrentDsn"] = dbDsn.DSN;
Response.Redirect(String.Format("~/{0}", dbDsn.DefaultPage));
}
}
LINQ语句是我收到错误的地方。如果该语句返回null,则代码继续正常,但如果它与数据库中的对象实际匹配,则会出现此错误。
编辑(附加信息)
错误消息是InvalidCastException 堆栈跟踪:
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.Table`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate) at WebApplication1.Default.SetCurrentDsn() in C:\Code\dir\Default.aspx.cs:line 163 at WebApplication1.Default.Page_Load(Object sender, EventArgs e) in C:\Code\dir\Default.aspx.cs:line 32 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
SiteObject.Dsn是一个字符串。所以是dsn。
基本上如果它是'localhost'(不在db中)代码传递,但如果它匹配('pgande')则抛出此错误。
答案 0 :(得分:1)
如果s.DSN
无法投放到dsn
,您将收到此错误消息。您可能需要提供转换。
答案 1 :(得分:0)
试试这个:
var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN.ToString() == dsn.ToString());
答案 2 :(得分:0)
我想你已经尝试了,但可能你需要施展dsn,而不是s.DSN?尝试使用链接“s => s.DSN == dsn.ToString()”。 这有帮助吗?
答案 3 :(得分:0)
我最终将表格放回我的数据上下文中,一切正常。显然有些东西在第一次被丢弃的桌子上腐败了。