【问题标题】:bool true value to bit 1 from Entity to Sql through public Nullable<bool>bool true value to bit 1 from Entity to Sql through public Nullable<bool>
【发布时间】: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。

标签: c# sql ajax wcf entity


【解决方案1】:

假设您正在使用 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 对象将包含所有附加属性/列值。唯一需要在实体/表中实际搜索特定对象的情况是更新它。

【讨论】:

  • 我认为您可能需要重新映射您的数据库。
  • 我明天在学校再试一次。感谢您的回答!
【解决方案2】:

不要使用"true",而是使用true(没有“”)

【讨论】:

  • 你的意思是在ajax中?谢谢,但结果还是一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
相关资源
最近更新 更多