2009-09-27 30 views
0

我想從我的成員表(asp.net成員資格)中唯一的標識符在我的客戶表中設置一個唯一標識符。設置GUID在LINQ中的UniqueIdentifier,空引用異常

但是我這樣做時得到一個空引用異常。這是代碼。

Customer customer = db.Customers.SingleOrDefault(c => c.Id == Convert.ToInt32(formValues["CustomerId"])); 
Guid userId = new Guid(user.ProviderUserKey.ToString()); 
customer.UserId = userId; 

它在最後一行崩潰。

我已經嘗試了我的客戶表中的數據庫和LINQ to SQL模型不同的設置,但我不斷收到此。

任何人都知道爲什麼嗎?

感謝

回答

2

你看到這一點,因爲這個表達式:

db.Customers.SingleOrDefault(
    c => c.Id == Convert.ToInt32(formValues["CustomerId"])); 

將返回nullnull被分配到customer變量。當兩條線後面使用customer時,它會拋出NullReferenceException

在這裏做的最好的事情就是調試代碼,看看formValues["CustomerId"]設置爲 - 最有可能這個值是集,這是造成你看看了客戶在數據庫中的客戶編號是沒有按」不存在。

+0

+1 yup - 防禦性編程的基本原理:如果有什麼可以返回NULL(和.SingleOrDefault()肯定可以!),你必須**總是**檢查NULL! – 2009-09-27 18:43:51

+0

我覺得很愚蠢:(我把客戶ID當作隱藏字段,但它不在Begin Form中使用block。無論如何謝謝。 – ddd 2009-09-28 12:58:13