powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ запрос возвращает данные только после выполнения SELECT из БД
25 сообщений из 35, страница 1 из 2
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110270
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LINQ-запрос не возвращает ни одной строки, хотя данные, удовлетворяющие запросу есть. Если подключиться к БД (MS SQL) например, через Management Studio и сделать SQL-запрос, то LINQ-запрос начинает возвращать данные.

В чем может быть дело? Т.е. как сделать, чтобы LINQ-запрос возвращал данные сразу.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110281
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouphLINQ-запрос не возвращает ни одной строки, хотя данные, удовлетворяющие запросу есть. Если подключиться к БД (MS SQL) например, через Management Studio и сделать SQL-запрос, то LINQ-запрос начинает возвращать данные.

В чем может быть дело? Т.е. как сделать, чтобы LINQ-запрос возвращал данные сразу.

Выложите минимальный проект, где это воспроизводится или linq запрос, во что он транслируется, структуру таблицы и пример данных в ней.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110295
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouph, местная гадалка на кофе в отпуске.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110299
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

from a in db.LOT
where (a.PURCHASE.FILIALID == UserFilial)
&& ((a.PURCHASE.DATE_PURCHASE >= DateBegin.Date) && (a.PURCHASE.DATE_PURCHASE <= DateEnd.Date))
select a.ID).Count()


CREATE TABLE [dbo].[PURCHASE](
[ID] [uniqueidentifier] NOT NULL,
[NUMBER] [varchar](250) NULL,
[DATE_PURCHASE] [date] NOT NULL,
[SUBJECT_PURCHASE] [varchar](8000) NOT NULL,
[FILIALID] [uniqueidentifier] NOT NULL,
[CREATORID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[CREATEDATE] [datetime] NOT NULL,
[METHOD_PURCHASE] [uniqueidentifier] NOT NULL,
[FORM_PURCHASE] [uniqueidentifier] NULL,
[PREFERENCE] [uniqueidentifier] NULL,
[COMMENT_PREFERENCE] [varchar](8000) NULL,
[DEPARTID] [numeric](18, 0) NULL,
CONSTRAINT [PK_PURCHASE] PRIMARY KEY CLUSTERED

CREATE TABLE [dbo].[LOT](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[SUBJECT_LOT] [varchar](8000) NOT NULL,
[START_COST] [numeric](18, 2) NOT NULL,
[PROCEDURE_COMPLETE] [bit] NOT NULL,
[PURCHASEID] [uniqueidentifier] NULL,
[ENTERED_CONTRACT] [bit] NULL,
[MODIFIED_CONTRACT] [bit] NULL,
[TERMINATED_CONTRACT] [bit] NULL,
[NO_APPLICATION] [bit] NULL,
CONSTRAINT [PK_LOT] PRIMARY KEY CLUSTERED

ALTER TABLE [dbo].[LOT] WITH CHECK ADD CONSTRAINT [FK_LOT_PURCHASE] FOREIGN KEY([PURCHASEID])
REFERENCES [dbo].[PURCHASE] ([ID])
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110305
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouph,

еще данных подкиньте в виде insert'ов в эти таблицы.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110306
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouph, тебя пример данных просили сделать (инсерты) и реальный linq-запрос (компилируемый). Во-вторых, используй тег SRC, чтобы хоть как-то сделать удобоваримым твой гавнокод.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110321
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
INSERT INTO [ASPNETDB].[dbo].[PURCHASE]
           ([ID]
           ,[NUMBER]
           ,[DATE_PURCHASE]
           ,[SUBJECT_PURCHASE]
           ,[FILIALID]
           ,[CREATORID]
           ,[CREATEDATE]
           ,[METHOD_PURCHASE]
           ,[FORM_PURCHASE])
     VALUES
           ('AFDF65C4-9804-46FB-A250-85CDE090B40D', '20120609', 'трубы', 'C328102B-4982-4704-8240-AFE0FAEE1FDA', 'E56FE048-07D8-4383-ADDA-2BCA57053248', '20120918', '318B1E77-B6ED-46A6-84EB-CA95D4A86DF4')

INSERT INTO [ASPNETDB].[dbo].[LOT]
           ([ID]
           ,[SUBJECT_LOT]
           ,[START_COST]
           ,[PROCEDURE_COMPLETE]
           ,[PURCHASEID]
           )
     VALUES
           ('958D154A-41FB-4B6D-9E5B-0010FD360CB3',
			'трубы', 25, 1, 'AFDF65C4-9804-46FB-A250-85CDE090B40D')
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110323
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,
что значит реальный запрос?
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110325
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouphМСУ,
что значит реальный запрос?

Вот это запрос:

Код: c#
1.
2.
3.
4.
from a in db.LOT
where (a.PURCHASE.FILIALID == UserFilial) 
&& ((a.PURCHASE.DATE_PURCHASE >= DateBegin.Date) && (a.PURCHASE.DATE_PURCHASE <= DateEnd.Date))
select a.ID).Count()



не компилируется, потому что написан не полностью, а также неизвестно, чему равен UserFilial.

Чтобы не гадать на кофейной гуще и не вытаскивать клещами из тебя информацию, научись правильно задавать вопросы - сразу и посуществу (пусть даже избыточно) выложить схему, наполнение и сам linq-запрос. Всё должно быть работающим.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110349
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
                var z = (from a in db.LOT
                         where (a.PURCHASE.FILIALID == new Guid("C328102B-4982-4704-8240-AFE0FAEE1FDA"))
                       && (a.PURCHASE.DATE_PURCHASE >= new DateTime(2012, 9, 6)) && (a.PURCHASE.DATE_PURCHASE <= DateTime.Now)
                select a.ID).Count();



В БД Сыпется

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
	COUNT(1) AS [A1]
	FROM   (SELECT [Extent1].[PURCHASEID] AS [PURCHASEID]
		FROM  [dbo].[LOT] AS [Extent1]
		INNER JOIN [dbo].[PURCHASE] AS [Extent2] ON [Extent1].[PURCHASEID] = [Extent2].[ID]
		WHERE (cast('c328102b-4982-4704-8240-afe0faee1fda' as uniqueidentifier) = [Extent2].[FILIALID]) AND ([Extent2].[DATE_PURCHASE] >= convert(datetime2, '2012-09-06 00:00:00.0000000', 121)) ) AS [Filter1]
	INNER JOIN [dbo].[PURCHASE] AS [Extent3] ON [Filter1].[PURCHASEID] = [Extent3].[ID]
	WHERE [Extent3].[DATE_PURCHASE] <= (SysDateTime())
)  AS [GroupBy1]



По твоим данным 1 строка выбирается.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110351
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouphLINQ-запрос не возвращает ни одной строки, хотя данные, удовлетворяющие запросу есть. Если подключиться к БД (MS SQL) например, через Management Studio и сделать SQL-запрос, то LINQ-запрос начинает возвращать данные.

В чем может быть дело? Т.е. как сделать, чтобы LINQ-запрос возвращал данные сразу.

Насчет всего что написали коллеги ранее полностью присоединяюсь. Чем правильней и точней опишешь проблему тем быстрее тебе ответят.
Пока же можно только предположить, что ты данные пишешь в базу одним контекстом, а читаешь другим, который был ранее создан.
Также вопрос еще в том, как ты пишешь в базу? Создаешь объекты и средставми LINQ добавляешь данные в базу или же они у тебя добавляются с помощью хранимых процедур?

В любом случае нужен полный рабочий код с комментариями.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110352
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110354
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,
Код: c#
1.
2.
3.
4.
5.
6.
var db = new PurchaseEntities(); 
Guid UserFilial = Guid.Parse("C328102B-4982-4704-8240-AFE0FAEE1FDA");
decimal c = (from a in db.LOT
                     where (a.PURCHASE.FILIALID == UserFilial)
                     && ((a.PURCHASE.DATE_PURCHASE >= DateBegin.Date) && (a.PURCHASE.DATE_PURCHASE <= DateEnd.Date))
                     select a.ID).Count();



Я не очень понимаю, зачем нужны данные. Проблема повторяется не постоянно. Т.е. большую часть времени все работает как положено. Но иногда случается так, что пользователи данные в таблицу ввели, а в отчете (который формируется с помощью LINQ-запроса) данных нету. После того, как я захожу напрямую в БД и делаю выборку (не обязательно совпадающую с конкретным LINQ-запросом) отчет начинает работать нормально. В связи с этим я думаю, что вряд ли конкретные цифровые или строковые значения в таблицах могут повлиять на результаты запроса.

Может у LINQ-запросов есть какое-нибудь кэширование, или что-то подобное. Т.е. м.б он обращается к БД не каждый раз? Может быть нужно поменять/добавить какие-либо настройки в web.config. Я хотел бы выяснить именно это.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110358
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,
Да, все выбирается. Все LINQ-запросы полностью рабочие. Возвращают верные данные. Никаких эксепшенов или чего-либо подобного. Т.е. бОльшую часть времени все Ок. Но, иногда случается так, что пользователи ввели данные в таблицы, а в отчет, который формируется с помощью LINQ-запросов данные не попадают. После того, как я захожу в БД, делаю SQL-запрос (не обязательно даже полностью повторяющий LINQ-запрос) ситуация исправляется. Т.е. отчет возвращает статистику по свежезанесенным данным.

Я бы хотел узнать, может быть в LINQ-запросе существует какое-то кэширование и его можно как-либо отключить (через web.config или другим способом)
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110376
gouph
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Homosum,
Запись в БД - SQL-запросами. Т.е. INSERT INTO PURCHASE VALUES() и т.п.

Отчеты формируются LINQ-запросами. БОльшую часть времени они работают как положено, но иногда почему то не отображают введенные данные. Т.е. пользователь ввел данные, зашел в отчет, а там количество записей = 0. Иногда, т.е. достаточно редко. Я хотел бы понять, с чем это связано. М.б. есть какое-то кэширование или что-то подобное.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110387
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouph, значит в твоем коде завелся шуршунчик. Надеюсь, ты сам понимаешь абсурдность своего вопроса? Откуда мы знаем, что там у тебя в приложении с отчетом?
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110391
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот у меня встречный вопрос:

from a in db.LOT
where (a.PURCHASE.FILIALID == UserFilial)
&& ((a.PURCHASE.DATE_PURCHASE >= DateBegin.Date) && (a.PURCHASE.DATE_PURCHASE <= DateEnd.Date))
select a.ID).Count()


Вот тут в WHERE все этом скобки обязательны?
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110394
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВот тут в WHERE все этом скобки обязательны?
Необязательны.

gouph
Тыкну пальцем в небо. Если у тебя SSRS, то он действительно может кешировать результаты (флаг clearSession): http://codearticles.ru/Home/ArticleView/1813
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110400
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не очень понимаю, зачем нужны данные. Проблема повторяется не постоянно. Т.е. большую часть времени все работает как положено. Но иногда случается так, что пользователи данные в таблицу ввели, а в отчете (который формируется с помощью LINQ-запроса) данных нету.


это вы просто транзакции не завершаете вовремя.

Commit...
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110404
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouphЯ не очень понимаю, зачем нужны данные. Проблема повторяется не постоянно.
Я не очень понимаю смысл твоего вопроса в форуме. Перечитай его еще раз и осознай, что на него впринципе нельзя ответить.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110419
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gouphLord British,
Я бы хотел узнать, может быть в LINQ-запросе существует какое-то кэширование и его можно как-либо отключить (через web.config или другим способом)

DbContext/ObjectContext может кешировать, если можно так выразиться. Просто приведу пример, я то не знаю как у тебя там что написано.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[t1](
	[ID] [int] NOT NULL,
	[SOME_DATA] [nchar](10) NULL,
 CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new DB1Entities())
            {
                db.t1.Add(new t1() { ID = 1 });
                db.t1.Add(new t1() { ID = 2 });

                db.SaveChanges();

                // В это время поьзователи изменяют колонку SOME_DATA
                // делают у себя Commit

                var q = from t in db.t1
                        select t;

                foreach (var t in q)
                    Console.WriteLine("{0}, {1}", t.ID, t.SOME_DATA);

                // Колонка в таком виде и осталась SOME_DATA = NULL, изменения не попали напечатает
                // 1,
                // 2,

                var t1Set = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<t1>();

                // по умолчанию DbSet<> использует AppendOnly стратегию для Identity Map,
                // меняем эту стратегию (для отчетов самое то
                t1Set.MergeOption = System.Data.Objects.MergeOption.NoTracking; 

                q = from t in t1Set
                        select t;

                foreach (var t in q)
                    Console.WriteLine("{0}, {1}", t.ID, t.SOME_DATA);

                // Теперь изменения видны
                // 1, КПЦУП342Е
                // 2, D2N8YV482
            }
        }
    }
}



Т. есть почитай подробнее о System.Data.Objects.MergeOption.

gouph Т.е. отчет...


Report серверы тоже умеют кешировать. И скорее всего это твой случай.
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110430
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British,

подправил гавнакод чтобы проблема воспроизводилась автоматом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[t1](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[SOME_DATA] [nchar](10) NULL,
 CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new DB1Entities())
            {
                db.t1.Add(new t1());
                db.t1.Add(new t1());

                db.SaveChanges();

                // В это время поьзователи изменяют колонку SOME_DATA
                // делают у себя Commit

                using (var otherPeople = new DB1Entities())
                {
                    var data = from t in otherPeople.t1
                               select t;
                    foreach (var t in data)
                        t.SOME_DATA = "РУРУРУРАОА";

                    otherPeople.SaveChanges();
                }

                // После чего ты делаешь select
                var q = from t in db.t1
                        select t;

                foreach (var t in q)
                    Console.WriteLine("{0}, {1}", t.ID, t.SOME_DATA);

                // Колонка в таком виде и осталась SOME_DATA = NULL, изменения не попали напечатает
                // 1,
                // 2,

                var t1Set = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<t1>();

                // по умолчанию DbSet<> использует AppendOnly стратегию для Identity Map,
                // меняем эту стратегию (для отчетов самое то
                t1Set.MergeOption = System.Data.Objects.MergeOption.NoTracking; 

                q = from t in t1Set
                        select t;

                foreach (var t in q)
                    Console.WriteLine("{0}, {1}", t.ID, t.SOME_DATA);

                // Теперь изменения видны
                // 1, КПЦУП342Е
                // 2, D2N8YV482
            }
        }
    }
}


...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110433
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British
Код: c#
1.
2.
var q = from t in db.t1
                        select t;


Режет глаза, лямбду чё, не любишь? :)
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110437
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lord British
Код: c#
1.
2.
3.
4.
var t1Set = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<t1>();
// по умолчанию DbSet<> использует AppendOnly стратегию для Identity Map,
// меняем эту стратегию (для отчетов самое то
t1Set.MergeOption = System.Data.Objects.MergeOption.NoTracking; 


DbExtensions.AsNoTracking Method (IQueryable)

P.S. Этож трекинг, это не кеширование :)
...
Рейтинг: 0 / 0
LINQ запрос возвращает данные только после выполнения SELECT из БД
    #38110438
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУLord British
Код: c#
1.
2.
var q = from t in db.t1
                        select t;


Режет глаза, лямбду чё, не любишь? :)

Люблю. Пох.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ запрос возвращает данные только после выполнения SELECT из БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]