Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Проблема со столбцом типа TIMESTAMP.  [new]
KellyLynch
Member

Откуда:
Сообщений: 94
У меня есть такая проблема: я из C# приложения (использующего Entity Framework 6) хочу вызвать SQL процедуру, в которой есть табличный параметр, использующий user-defined table type. То есть: существует user-defined table type:

CREATE TYPE [dbo].[Work_Work] AS TABLE (
    [WorkCode] INT NOT NULL,
);

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

PROCEDURE [dbo].[MyProc]  @Works [dbo].[Work_Work] READONLY


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

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-а при вызове моей процедуры?
11 июл 19, 14:19    [21924927]     Ответить | Цитировать Сообщить модератору
 Re: Проблема со столбцом типа TIMESTAMP.  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
KellyLynch,

в чём проблема? В ошибке чётко сказано, что данные нужно заполнить
14 авг 19, 11:10    [21948928]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить