このエラーに関する情報はあまり得られていませんが、この特定のコードでキャストを使用していないため、かなり迷っています。
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')、このエラーがスローされます。