2013-09-25 40 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你的意思是?谢谢,但结果仍然相同。 –