0

У меня есть версия SQL Server Compact Edition 3.5 для приложения winforms, которое используется для хранения информации о заказе, но у меня была жалоба от кого-то, у кого возникают проблемы, когда детали не появляется после того, как он был завершен и отправлен, и, получив базу данных пользователя, я могу воспроизвести проблему, но я не могу понять, почему. Я пытаюсь понять, почему они не синхронизируются, потому что другие работают очень хорошо, и я искал Stack Overflow и не нашел ответа, который сработал для меня.Linq Query возвращает 0 результатов, но должен возвращать 1

Результаты LINQPad/SSMS на базе данных я получил то же самое и принести одну строку вверх в результате следующего запроса (тот же запрос, как основа объект профилировщика показывает):

SELECT [Extent1].[Id]     AS [Id], 
     [Extent1].[OrderHeaderId]  AS [OrderHeaderId], 
     [Extent1].[Price]    AS [Price], 
     [Extent1].[Quantity]   AS [Quantity], 
     [Extent1].[OverridePrice]  AS [OverridePrice], 
     [Extent1].[ShippingWeight]  AS [ShippingWeight], 
     [Extent1].[ExtendedPrice]  AS [ExtendedPrice], 
     [Extent1].[OrderId]    AS [OrderId], 
     [Extent1].[ProductItemNo]  AS [ProductItemNo], 
     [Extent1].[ProductItemNoTypeId] AS [ProductItemNoTypeId] 
FROM [OrderDetail] AS [Extent1] 
WHERE [Extent1].[OrderHeaderId] = 'eec06164-a052-4c23-9575-8fe1b80c8baa' /* @p__linq__0 */ 

Однако, если Я использую одно из следующих утверждений, которые я не получаю результатов:

_orderDetails = ctx.OrderDetail.Where(o => o.OrderHeaderId == _order.Id).ToList(); 

_orderDetails = (from od in ctx.OrderDetail 
       where od.OrderHeaderId == _order.Id 
       select od).ToList(); 

Заказать Заголовок:

-- Creating table 'OrderHeader' 
CREATE TABLE [OrderHeader] (
    [Id] uniqueidentifier NOT NULL, 
    [PONumber] nvarchar(4000) NULL, 
    [InternalOrderText] nvarchar(4000) NULL, 
    [TimeStamp] datetime NOT NULL, 
    [IOCTrackingNo] nvarchar(4000) NULL, 
    [CarrierCode] nvarchar(4000) NULL, 
    [HowEntered] nvarchar(4000) NOT NULL, 
    [MessageName] nvarchar(4000) NOT NULL, 
    [RepID] nvarchar(4000) NOT NULL, 
    [BatchID] nvarchar(4000) NOT NULL, 
    [Status] nvarchar(4000) NOT NULL, 
    [ApplicationVersion] nvarchar(4000) NOT NULL, 
    [CustomerAccountID] nvarchar(4000) NOT NULL, 
    [CustomerSubAccountID] nvarchar(4000) NOT NULL, 
    [SystemArrivalDate] datetime NULL, 
    [OrderId] int NOT NULL 
); 
GO 

-- Creating primary key on [Id] in table 'OrderHeader' 
ALTER TABLE [OrderHeader] 
ADD CONSTRAINT [PK_OrderHeader] 
    PRIMARY KEY ([Id]); 
GO 

Order Detail:

-- Creating table 'OrderDetail' 
CREATE TABLE [OrderDetail] (
    [Id] uniqueidentifier NOT NULL, 
    [OrderHeaderId] uniqueidentifier NOT NULL, 
    [Price] decimal(18,2) NOT NULL, 
    [Quantity] int NOT NULL, 
    [OverridePrice] bit NOT NULL, 
    [ShippingWeight] decimal(18,3) NOT NULL, 
    [ExtendedPrice] decimal(18,2) NOT NULL, 
    [OrderId] int NOT NULL, 
    [ProductItemNo] nvarchar(4000) NOT NULL, 
    [ProductItemNoTypeId] uniqueidentifier NOT NULL 
); 
GO 

-- Creating primary key on [Id] in table 'OrderDetail' 
ALTER TABLE [OrderDetail] 
ADD CONSTRAINT [PK_OrderDetail] 
    PRIMARY KEY ([Id]); 
GO 

Внешний ключ:

-- Creating foreign key on [OrderHeaderId] in table 'OrderDetail' 
ALTER TABLE [OrderDetail] 
ADD CONSTRAINT [FK_OrderDetailOrderHeader] 
    FOREIGN KEY ([OrderHeaderId]) 
    REFERENCES [OrderHeader] 
     ([Id]) 
    ON DELETE CASCADE ON UPDATE NO ACTION; 

-- Creating non-clustered index for FOREIGN KEY 'FK_OrderDetailOrderHeader' 
CREATE INDEX [IX_FK_OrderDetailOrderHeader] 
ON [OrderDetail] 
    ([OrderHeaderId]); 
GO 
+1

Вы проверили, является ли _order.Id, что вы ожидаете от того, что это «eec06164-a052-4c23-9575-8fe1b80c8baa»? – neo

+0

Да, я это сделал, так как я изначально получил идентификатор, просмотрев заказ во время отладки. Думаю, я тоже должен опубликовать код. – Charles380

+0

Не могли бы вы попробовать? ctx.OrderDetail.Where (o => o.OrderHeader.Id == _order.Id) .ToList(); – neo

ответ

0

Я и некоторые другие не смогли понять, почему связь стала сломана, так что я решил изменить базу данных на SQL CE 4.0 из-за способность использовать поля int identity, и с тех пор у нас не было этой проблемы.

Смежные вопросы