powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема со столбцом типа TIMESTAMP.
2 сообщений из 2, страница 1 из 1
Проблема со столбцом типа TIMESTAMP.
    #39836386
KellyLynch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть такая проблема: я из C# приложения (использующего Entity Framework 6) хочу вызвать SQL процедуру, в которой есть табличный параметр, использующий user-defined table type. То есть: существует user-defined table type:

Код: sql
1.
2.
3.
CREATE TYPE [dbo].[Work_Work] AS TABLE (
    [WorkCode] INT NOT NULL,
);


И он используется в моей процедуре так:

Код: sql
1.
PROCEDURE [dbo].[MyProc]  @Works [dbo].[Work_Work] READONLY



Из C# приложения я его вызываю так (используя DbContext.Database.ExecuteSqlCommand):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var worksTable = new System.Data.DataTable();
worksTable.Columns.Add("WorkCode");
var row = worksTable.NewRow();
row["WorkCode"] = <a value>;
worksTable.Rows.Add(row);

var worksSqlParam = new System.Data.SqlClient.SqlParameter("Works", worksTable);
worksSqlParam.TypeName = "dbo.Work_Work";

dbContext.Database.ExecuteSqlCommand("[MyProc] @Works", worksSqlParam);



И всё работает хорошо.
Но недавно в этот user-defined type [Work_Work] добавили новое поле - "[Concurrency] TIMESTAMP NOT NULL".
Моей процедуре оно не нужно. Оно нужно некоей другой процедуре, которая не пишет в таблицу базы (как моя), а читает оттуда. В таблице базы есть поле “[Concurrency] TIMESTAMP NULL”; вот той “другой процедуре” понадобилось его вычитать, для чего его и добавили в тип [Work_Work].

Но вот мой C# код после этого перестал вызывать процедуру. Если оставить его как есть, то вызов “dbContext.Database.ExecuteSqlCommand” ругается на то что в типе [Work_Work] больше полей, чем я передаю в параметре “worksSqlParam” (что верно).
(“Trying to pass a table-valued parameter with 1 column(s) where the corresponding user-defined table type requires 2 column(s)”)

Если же я в C# коде добавлю в таблицу worksTable ещё и поле Concurrency, то при вызове “dbContext.Database.ExecuteSqlCommand” выскакивает другая ошибка – “Cannot insert an explicit value into a timestamp column. Use INSERT with a column list to exclude the timestamp column, or insert a DEFAULT into the timestamp column”.
Причём это происходит в .NET, до того как моя SQL процедура вызвана.

Можно ли как-то эту проблему решить? Как-то заставить .NET всё же вызвать мою процедуру? Ведь из TSQL я это сделать могу – там я могу написать код, который не станет “ insert an explicit value into a timestamp column”. Как мне добиться такого же поведения от .NET-а при вызове моей процедуры?
...
Рейтинг: 0 / 0
Проблема со столбцом типа TIMESTAMP.
    #39849125
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KellyLynch,

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


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