Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ to SQL. Багофича VS2015. / 1 сообщений из 1, страница 1 из 1
15.08.2016, 13:36
    #39291919
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ to SQL. Багофича VS2015.
MSVS2015 Community 14.0.25123 update 2.
Осваиваю LINQ to SQL. Добавил в проект LINQ to SQL Classes. Сделал класс для таблицы. Смотрю какие запросы генерятся. Есть таблица
Код: sql
1.
Test (nId int IDENTITY(1,1) PRIMARY KEY CLUSTERED, cText nvarchar(50) NOT NULL, tCreate smalldatetime NOT NULL DEFAULT (getdate()))


поле tCreate дата создания записи, она не меняется никогда.
Код теста
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
			var db = new DataClasses1DataContext();
			db.Log = Console.Out; 
			var r = db.Tests.Take(1).SingleOrDefault();
			if(r == null) { // Добавляем запись если пусто
				Console.WriteLine("****************** INSERT **************************");
				r = new Test { cText = "new" };
				db.Tests.InsertOnSubmit(r);
			} else {
				Console.WriteLine("****************** UPDATE **************************");
				r.cText = DateTime.Now.ToString();
			}
			db.SubmitChanges();


Сначала не хотел работать INSERT, поставил в свойствах
Код: c#
1.
2.
3.
Auto Generated Value = True
Deleay Loaded = True
Update Check = Never


последние два чтобы лишний раз не упоминалось в запросах. К INSERT больше претензий нет.
Но начались проблемы с UPDATE.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT TOP (1) [t0].[nId], [t0].[cText] // тут нет tCreate 
FROM [dbo].[Test] AS [t0]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.6.1055.0

****************** UPDATE **************************
UPDATE [dbo].[Test]
SET [cText] = @p2
WHERE ([nId] = @p0) AND ([cText] = @p1)

SELECT [t1].[tCreate]
FROM [dbo].[Test] AS [t1]
WHERE ((@@ROWCOUNT) > 0) AND ([t1].[nId] = @p3)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [2]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [15.08.2016 11:28:03]
-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [15.08.2016 11:40:49]
-- @p3: Input Int (Size = -1; Prec = 0; Scale = 0) [2]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.6.1055.0

SELECT [t0].[tCreate]
FROM [dbo].[Test] AS [t0]
WHERE [t0].[nId] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [2]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.6.1055.0


В итоге перебором галок наткнулся на
Код: c#
1.
Auto-Sync = OnInsert


и помогло, лишние SELECT [t0].[tCreate] исчезли. Только до этого стояло Auto-Sync = Never, т.е. получается Never == Always ???

И еще вопрос: как-то можно задать дефолные значения свойствам неключевых полей чтобы все не протыкивать? Например Update check = Never.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ to SQL. Багофича VS2015. / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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