Как заставить сущностный каркас уважать истинную природу значений по умолчанию для столбцов БД - PullRequest
0 голосов
/ 26 июня 2019

Рассмотрим следующее определение таблицы, которое создает таблицу со значениями по умолчанию, которые не могут иметь значение NULL, и которые имеют значения по умолчанию для случаев, когда значение не указано

drop table [defaultTest]

CREATE TABLE [defaultTest](
    [TestId] [int] IDENTITY(1,1) NOT NULL,
    [TestData] [nvarchar](100) NOT NULL,
    [TestKey] [int] NOT NULL,
    [TestTimeStamp] [datetimeoffset](7) NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [TestId] 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

ALTER TABLE [defaultTest] ADD  CONSTRAINT [DF_Test_TestKey]  DEFAULT (NEXT VALUE FOR [SomeSequence]) FOR [TestKey]
GO

ALTER TABLE [defaultTest] ADD  CONSTRAINT [DF_Test_TestTimeStamp]  DEFAULT (sysdatetimeoffset()) FOR [TestTimeStamp]
GO

CREATE UNIQUE NONCLUSTERED INDEX [defaultTest_TestKey_Insert_UK] ON [defaultTest]
(
    [TestKey] ASC,
    [TestTimeStamp] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

declare @testkey int;
declare @id int;
insert into [defaultTest]([TestData]) values ('Original');
set @id = @@IDENTITY;
select @testkey = [TestKey] from [defaultTest] where [TestId] = @id;
insert into [defaultTest]([TestData], [TestKey] ) values ('Updated', @testkey);

select * from [defaultTest];

TestId  TestData    TestKey TestTimeStamp
1   Original    27  2019-06-26 14:40:22.1042605 +10:00
2   Updated 27  2019-06-26 14:40:22.1062673 +10:00

В базе данных это работает отлично. Вставка может предоставлять значение или нет, и база данных будет гарантировать, что значение всегда там.

Но когда эта таблица базы данных упоминается в базе данных платформы сущностей, я сначала пытаюсь добиться того, чтобы структура сущности учитывала истинную природу ситуации.

Наблюдаемое поведение состоит в том, что он либо всегда пропускает нулевые значения, если StoredGeneratedPattern = нет, а поля пусты, а всегда пропускает ноль, если StoredGeneratedPattern = Computed (или Identity), даже если значение предоставляется.

Это не то, как определение когда-либо работает на уровне базы данных, так почему структура сущностей была запрограммирована таким образом, является загадкой?

Есть ли способ заставить структуру сущностей вести себя правильно для этого сценария?

РЕДАКТИРОВАТЬ: я попытался удалить ограничение не пустое из ключа, но структура сущностей отказывается извлекать сгенерированное значение обратно из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...