布尔值为位 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'
        });
    }
};

关于我做错了什么有什么建议吗?

布尔值为位 1,从实体到 Sql,通过公共 Nullable<bool>

假设您正在使用 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(不带" ")