【发布时间】:2013-09-25 12:52:17
【问题描述】:
遇到了一个奇怪的问题,我找不到解决方案。 我的客人桌子上有一行 看起来像这样:
[GuestOnline] [bit] NULL,
因此,当我创建 Guest 时,我使用 json 格式的 ajax 调用将值“true”从客户端传递到 WCF 应用程序,该应用程序将值发送到目前看起来像这样的属性。
[DataMember]
public Nullable<bool> GuestOnline
{
get
{
return this.GuestOnline = true;
}
set
{
this.GuestOnline = true;
}
}
将 Guest 插入 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;
}
这应该清楚地将值“true”发送到我在 SQL 中的行。并且该值应转换为位值= 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'
});
}
};
对我做错了什么有什么建议吗?
【问题讨论】:
-
并不是说这会解决您的问题,但我建议使用 FirstOrDefault 而不是 First,因为它也可以返回 null,而没有结果的 First 会引发异常。
-
你说得对,它并没有解决我的问题。但我必须感谢您优化我的代码。
-
我假设您使用的是 Linq to Entities / Linq to SQL?因为如果 Guest 已经是一个映射对象,则不需要创建新对象,只需将传递的对象提交到数据库中即可。
-
是的,没错,但我开始在这个自动生成的代码中创建新对象的原因是这种行为是不可接受的。但我只是试着顺其自然,结果还是一样。再次感谢您,
-
我要写一个答案,但不能 100% 确定它会解决您遇到的问题,因为 JavaScript 可能没有传递正确的数据。当然不要使用带真实值的引号,或者可能传递 0 或 1。