非常に奇妙なキャスト例外が発生しています。例外は非常にまれです。奇妙なLinqキャスト例外
これは、コードされています。私は取得
protected Guid GetWebsiteLanguage(Guid websiteId, int languageId)
{
Guid websiteLanguagesId = Guid.Empty;
var websites = from item in DataContext.WebsiteLanguages
where item.WebsiteId == websiteId && item.LanguageId == languageId
select item.Id;
if (websites.Count() != 1)
throw new ArgumentException("Wrong channel parameters.");
try
{
websiteLanguagesId = websites.First();
}
catch (Exception ex)
{
string errorMessage = websites.First() == null ? "websites.First() is null" : string.Concat("Invalid Guid ", websites.First().ToString());
throw new Exception(string.Concat(ex.Message, " - Log: ", errorMessage, " - Variables: websiteId = ", websiteId.ToString(), " languageId = ", languageId));
}
return websiteLanguagesId;
}
例外はこれです:
指定されたキャストは有効でではありません。 - ログ:
無効のGUID ef058612-37db-4b02-aa13-5a528819a5e0
変数: websiteId = db725f45-70fa-4fd0-b344-55bbf17a5c15
言語ID = 2057
これはキャッチの例外の出力。あなたが見ることができるように、我々はGUIDを持っていますが、まだキャスト例外を与えています...
時々、この関数のCount()に間違っています。次に、これはスタックトレースです。
System.Data.Linq.IExecuteResult Execute(System.Linq.Expressions.Expression、QueryInfo、System.Data.Linq.SqlClient.IObjectReaderFactory、System.Object []、System.Object [] 、System.Data.Linq.SqlClient.ICompiledSubClery []、System.Object)STACKTRACE:System.Data.Linq.SqlClient.SqlProvider.Execute(式クエリ、QueryInfo queryInfo、IObjectReaderFactoryファクトリ、Object [] parentArgs、Object [] userArgs System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(式クエリ、QueryInfo []クエリインフォ、IObjectReaderFactoryファクトリ、オブジェクト[] userArguments、ICompiledSubQuery [] subQueries)の System.Dataの でICompiledSubQuery [] subQueries、Object lastResult) Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(式クエリ) at System.Data .Linq.DataQuery 1.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.Count[TSource](IQueryable
1ソース)GetWebsiteLanguageで (GUID websiteId、のInt32言語ID)
そして、これが唯一の解決策をoccuresとき、IISアプリケーションプールのリサイクルを行うことであり、それは再び取り組んでいます。
アイデア?
これは、私はまあ、私は問題の原因を確認していない私のDataContext
public MyDataContext DataContext
{
get
{
//Changed this to make this testable with unit tests
if (HttpContext.Current != null)
{
if (!HttpContext.Current.Items.Contains(DataContextKey))
HttpContext.Current.Items.Add(DataContextKey, new MyDataContext(ConnectionString));
return (MyDataContext)HttpContext.Current.Items[DataContextKey];
}
else
{
//When context is not available
if (context == null)
context = new MyDataContext(ConnectionString);
return context;
}
}
}
これが問題を解決するかどうかはわかりません...例外は回数によっては時々発生するが、ウェブサイトでは別の時間が発生するためです。最初(); First()式が間違っていれば、その例外は非常に奇妙です。 (例に示すように) – user1035498
それは再現性があります:つまり、アプリケーションプールのリサイクル後、同じGuidが動作しているか、動作していないことが一貫していますか? – Pleun
それはあなたの問題を解決しないかもしれないことは間違いありませんが(その場合はおそらく異なるSQLが生成されます)、その場合です。しかし、このようなリファクタリングはあなたのパフォーマンスを改善します。 – Pleun