2013-09-25 41 views
0

有一個奇怪的問題,我無法找到一個解決方案。 我在我的客飯 一排,看起來像這樣:bool真實值從實體到Sql通過公共空值<bool>

[GuestOnline] [bit] NULL, 

所以,當我創建一個客戶,我傳遞值「真」,從客戶端與Ajax調用JSON格式的WCF應用程序將值發送給目前看起來像這樣的屬性。

[DataMember] 
public Nullable<bool> GuestOnline 
{ 
    get 
    { 
     return this.GuestOnline = true; 
    } 
    set 
    { 
     this.GuestOnline = true; 
    } 
} 

是插入從客人到DB C#的方法是這樣的:

public Guest CreateGuest(Guest guest) 
{ 
    context.Guests.Add(new Guest() { 
     GuestName = guest.GuestName, GuestOnline = true }); 
    context.SaveChanges(); 

    var result = context.Guests.First<Guest>(g => g.GuestName == guest.GuestName); 

    return result; 

} 

這應明確在SQL值 「true」 發送到我行。值應該轉換爲位值= 1,但它不會。我仍然在我的數據庫中獲得NULL的值。 Ajax調用看起來是這樣的:

function createguest() { 
    if (userName.value !== "") { 

     var guestData = '{"GuestName":"' + userName + '", "GuestOnline":"' + "true" + '"}'; 

     $.ajax({ 
      type: 'POST', 
      url: 'http://localhost:35709/ChatService.svc/guests', 
      contentType: 'application/json; charset=utf-8', 
      data: guestData, 
      dataType: 'json' 

     }); 
    } 

}; 

什麼,我做錯了什麼建議?

+0

不是說這會解決你的問題,但我建議使用FirstOrDefault而不是First,因爲它也可以返回null,而First沒有結果會拋出異常。 – JNYRanger

+0

你有權利,它並沒有解決我的問題。但我必須感謝您優化我的代碼。 –

+0

我假設你使用Linq to Entities/Linq to SQL?因爲如果Guest已經是一個映射對象,您不需要創建一個新對象,而只是將傳入的對象提交到數據庫中。 – JNYRanger

回答

1

假設你正在使用LINQ到SQL/LINQ到實體和客戶對象已經映射到你的數據庫試試這個。我們還假設Guests是由表示包含Guest對象的表或結構的映射創建的實體的名稱。

public Guest CreateGuest(Guest guest) 
{ 
    guest.GuestOnline = true; 
    context.Guests.InsertOnSubmit(guest); 
    context.SubmitChanges(); //context.SaveChanges() for LINQ to Entity 

    return guest; 
} 

這將直接使用傳遞給它的Guest對象和GuestOnline屬性更改爲true。然後它會將對象屬性的記錄插入名爲Guests的表(或其他實體結構)中。由於可能存在觸發器來修改插入時添加的記錄或其他屬性(例如自動遞增的主鍵值),因此返回的Guest對象將包含所有其他屬性/列值。如果你正在更新它,唯一需要真正搜索實體/表格的特定對象。

+0

非常好的答案。仍然沒有工作。 –

+0

我想你可能需要重新映射你的數據庫。 – JNYRanger

+0

我會再次在學校嘗試。謝謝您的回答! –

0

不要使用"true"true(不包括「「)

+0

in ajax你的意思是?謝謝,但結果仍然相同。 –