-2

没有得到关于这个错误的太多信息,但我没有在这个特定的代码中使用任何转换,所以我很迷茫。

        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'(不在数据库中),则代码通过,但如果它匹配('pgande'),则会引发此错误。

4

4 回答 4

1

如果s.DSN无法转换为dsn,您将收到此错误。您可能需要提供转换。

于 2012-08-14T14:26:48.737 回答
0

尝试这个:

  var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN.ToString() == dsn.ToString());
于 2012-08-14T14:29:28.923 回答
0

我想你已经尝试过了,但可能你需要投 dsn,而不是 s.DSN?尝试链接“s => s.DSN == dsn.ToString()”。这有帮助吗?

于 2012-08-14T14:58:03.493 回答
0

我最终将表放回我的数据上下文中,一切正常。显然,第一次放入的表已经损坏。

于 2012-08-14T15:34:54.560 回答