Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#>;中的LINQ到SQL;更新和插入无效。表中有PK_C#_Sql_Wcf_Linq - Fatal编程技术网

C#>;中的LINQ到SQL;更新和插入无效。表中有PK

C#>;中的LINQ到SQL;更新和插入无效。表中有PK,c#,sql,wcf,linq,C#,Sql,Wcf,Linq,在我的WCFWeb服务中,我一直在毫无困难地从数据库中读取数据。今天我尝试了一次更新,但很快发现这些更改实际上并没有保存到数据库中。我没有收到任何错误或异常抛出。在过去的几个小时里,我一直在研究这个问题,但运气不佳。我发现了许多类似的问题,但大多数情况下,原因是要写入的表没有主键,但是这个表不是这样 下面是一些代码: var db = new dbDataContext(Convert.ToString(ConfigurationManager.AppSettings["sConn"]));

在我的WCFWeb服务中,我一直在毫无困难地从数据库中读取数据。今天我尝试了一次更新,但很快发现这些更改实际上并没有保存到数据库中。我没有收到任何错误或异常抛出。在过去的几个小时里,我一直在研究这个问题,但运气不佳。我发现了许多类似的问题,但大多数情况下,原因是要写入的表没有主键,但是这个表不是这样

下面是一些代码:

var db = new dbDataContext(Convert.ToString(ConfigurationManager.AppSettings["sConn"]));

...


        var bookingRow = (from mBooking in db.d_bookings
                          where mBooking.booking_id == bookingID
                          select new BookingResult
                          {
                              guideID = mBooking.user_id_guide == null ? 0 : (int)mBooking.user_id_guide,
                              adultShow = mBooking.booking_nAdults_show == null ? 0 : (int)mBooking.booking_nAdults_show,
                              childShow = mBooking.booking_nChild_show == null ? 0 : (int)mBooking.booking_nChild_show,
                          }
                          ).Single();

        bookingRow.guideID = someNewValue;
        bookingRow.adultShow = someNewValue;
        bookingRow.childShow = someNewValue;

        try
        {
            db.SubmitChanges();
        }
        catch (Exception ex)
        {
            return "{\"result\" :  \"false\" }";

        }
BookingResult类简单地是:

public class BookingResult
{
    public int guideID { get; set; }
    public int adultShow { get; set; }
    public int childShow { get; set; }
}
这是我与WCF和LINQ合作的第一个项目,在大多数情况下,它看起来非常直接,但这让我陷入了一个循环。非常感谢您的帮助

已解决:问题是我正在读取未附加到DataContext的自定义类。删除类并只选择整行就可以了

var bookingRow = (from mBooking in db.d_bookings
                      where mBooking.booking_id == bookingID
                      select mBooking
                  ).Single();

您正在创建一个全新的
BookingResult
,它不会附加到
DataContext
,因此在调用
SubmitChanges
时不会被视为更改。数据库中是否有一个名为
BookingResults
的表?你希望你的新
图书结果会怎么样?它会创建一个新行吗?

实际上,我只是在别处读到,我可以将信息读入我自己制作的一个类中,以便于使用。这里的想法是检索要更新的行,进行一些更改,然后将更改提交到数据库。编辑:忘了提到没有名为bookingreult的表,它只是我创建用来存储检索到的行的类的名称。我现在已经让它工作了!我停止阅读我的自定义类,只选择了整行。现在我的改变正在起作用。谢谢你给我指明了正确的方向!