布尔值为位 1,从实体到 Sql,通过公共 Nullable
本文关键字:Nullable bool Sql 实体 布尔值 | 更新日期: 2023-09-27 18:32:49
有一个奇怪的问题,我找不到解决方案。我的"来宾"表中有一行看起来像这样:
[GuestOnline] [bit] NULL,
因此,当我创建来宾时,我将值"true"从客户端传递,并使用 json 格式的 ajax 调用传递给 WCF 应用程序,该应用程序将值发送到目前如下所示的属性。
[DataMember]
public Nullable<bool> GuestOnline
{
get
{
return this.GuestOnline = true;
}
set
{
this.GuestOnline = true;
}
}
将来宾插入数据库的 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'
});
}
};
关于我做错了什么有什么建议吗?
假设您正在使用 LINQ to SQL/LINQ to Entities,并且 Guest 对象已经映射到您的数据库,请尝试此操作。 我们还假设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
对象将包含所有其他属性/列值。 只有在实体/表中实际搜索特定对象时,您才需要对其进行更新。
不要使用"true"
而是使用true
(不带" ")