매우 이상한 캐스트 예외가 발생했습니다. 매우 드물게 예외가 발생합니다.이상한 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;
}
내가 얻을 예외는 이것이다 :
지정한 캐스트가 유효하지 않습니다
이
는 코드입니다. - 로그인 :잘못된 가이 ef058612-37db-4b02-aa13-5a528819a5e0
변수 : 은 =이
의 LanguageID = 2057
이것은-4fd0-b344-55bbf17a5c15 db725f45-70fa입니다 websiteId catch의 예외 출력. 보시다시피 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.ICompiledSubQuery [], System.Object) STACKTRACE : System.Data.Linq.SqlClient.SqlProvider.Execute에서 (식 쿼리, QueryInfo queryInfo, IObjectReaderFactory 팩터 리, Object [] parentArgs, Object [] userArgs) , ICompiledSubQuery [] subQueries, Object lastResult) System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (식 쿼리, QueryInfo [] queryInfos, IObjectReaderFactory 팩터 리, ObjectArguments, ICompiledSubQuery [] 하위 쿼리)에서 System.Data에 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의 LanguageID)
그리고이 유일한 해결책을 occures 때 IIS 응용 프로그램 풀 재활용을 수행하고 다시 노력하고 있습니다.
아이디어가 있으십니까?
이 내가 문제의 원인이 무엇인지 확실하지 않다, 내가 잘 내 데이터 컨텍스트
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