這是有點棘手,弄清楚我想,也許我失去了一些東西。 我是一個新手,試圖將通過Linq-to-SQL映射的數據庫綁定到我的服務器。有一個客戶端調用的函數,從數據庫中檢索UserAccount:Linq to SQL InvalidCastException
public static explicit operator Dictionary<byte, object>(UserAccount a)
{
Dictionary<byte, object> d = new Dictionary<byte, object>();
d.Add(0, a.AuthenticationDatas.Username);
int charCount = a.Characters.Count;
for (int i = 0; i < charCount; i++)
{
d.Add((byte)(i + 1), (Dictionary<byte, object>)a.Characters[i]);
}
return d;
}
什麼這實際上做的是一個UserAccount類型轉換爲詞典的我的服務器的數據類型。 UserAccount本身從數據庫中檢索,然後通過這個函數轉換。
然而,當我運行這個功能,我得到InvalidCastException的上線:
int charCount = a.Characters.Count;
而且,當VS斷點@這條線,我可以等待幾秒鐘,然後繼續和錯誤時拋出將會消失!它在那之後正確地檢索Characters.Count。
這裏是我的字符映射:
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="UserAccount_Character", Storage="_CharactersTBs", ThisKey="UID", OtherKey="UID")]
public EntitySet<Character> Characters
{
get
{
return this._Characters;
}
set
{
this._Characters.Assign(value);
}
}
我相信什麼情況是,要求以某種方式在另一個線程,然後與數據庫交互的一個執行,並出現了錯誤的數據庫,然後才能實際檢索漢字表。我不太確定...
有誰知道這個問題可能是什麼,我怎麼能syncronize它(不添加一些瘸子延遲)?
編輯:
好吧,我縮小的問題。它與不同的線程聯網或什麼不相關......它只是我愚蠢。這是一個簡單的數據庫查詢,它引發InvalidCastException @行int count = UA.Characters.Count;
static void Main(string[] args)
{
IEnumerable<UserAccount> query = from p in PBZGdb.Instance.AuthenticationDatas
where p.Username == "Misha" && p.Password == "123"
select p.UserAccount;
UserAccount UA = query.ElementAt(0);
int count = UA.Characters.Count;
Console.WriteLine(count);
Console.ReadKey();
}
(附註)UA IS NOT NULL它確實找到userAccount的正確的實例,它有2個字符。如果我等幾秒鐘,然後再試異常消失.. 我在做什麼錯了?這是我第一次真的在VS中使用數據庫,請幫忙! :)
提供例外的確切消息。 – leppie 2012-01-03 06:59:16
奇怪,我懷疑'(byte)(i + 1)'可能會拋出異常。 – 2012-01-03 07:01:19
你確定它在這行'int charCount = a.Characters.Count;'?你有沒有在調試或發佈模式下運行它?由於在發佈模式下發生的優化,調試器有時可能會有點困惑。 – ChrisWue 2012-01-03 07:02:46