Entity Framework 4 и SYSUTCDATETIME () - PullRequest
       3

Entity Framework 4 и SYSUTCDATETIME ()

3 голосов
/ 21 февраля 2011

В моей базе данных есть таблица (MS SQL 2008) со значением по умолчанию для столбца SYSUTCDATETIME ().

Идея состоит в том, чтобы автоматически добавлять дату и время, как только будет создана новая запись.

Я создаю концептуальную модель, используя EF4, и создал ASP.PAGE с элементом управления DetailsView в режиме INSERT.

Мои проблемы:

Когда я создаю новую запись. EF не может вставить фактическое значение даты и времени, но вместо этого оно вставляет это значение 0001-01-01 00: 00: 00.00.

Полагаю, EF не может использовать SYSUTCDATETIME (), определенный в моей базе данных

Есть идеи, как это решить? Спасибо

Вот мой SQL-скрипт

    CREATE TABLE dbo.CmsAdvertisers
(
    AdvertiserId            int             NOT NULL    IDENTITY
        CONSTRAINT PK_CmsAdvertisers_AdvertiserId PRIMARY KEY,
    DateCreated             dateTime2(2)    NOT NULL
        CONSTRAINT DF_CmsAdvertisers_DateCreated DEFAULT sysutcdatetime (),
    ReferenceAdvertiser     varchar(64)     NOT NULL,
    NoteInternal            nvarchar(256)   NOT NULL
        CONSTRAINT DF_CmsAdvertisers_NoteInternal DEFAULT ''
);

Мое временное решение: Пожалуйста, ребята, помогите мне в этом

e.Values ​​["DateCreated"] = DateTime.UtcNow;

Подробнее здесь:

http://msdn.microsoft.com/en-us/library/bb387157.aspx

Как использовать стандартную Entity Framework и значения даты по умолчанию

http://msdn.microsoft.com/en-us/library/dd296755.aspx

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

На странице ASP .NET при создании записи вы фактически добавляете значение для значения DateCreated.Я вижу, что вы делаете это сейчас, и это именно то, что вам нужно было сделать в первую очередь.

Так что я бы предположил, что происходило раньше, это то, что вы создавали новую запись, но не устанавливали значение дляПоле DateCreated.Но так как DateTime имеет значение по умолчанию 0001-01-01 00:00:00.00, именно поэтому вы получаете такое поведение.

Значение по умолчанию будет работать только для случая, когда вы вставляете строку, но не указываете, что делатьс полем DateCreated.Но то, как работает EF, всегда будет предоставлять значение для этого (если вы не напишите свой собственный запрос вставки, чтобы переопределить сгенерированные).

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

1 голос
/ 21 февраля 2011

Проблема в том, что EF не знает об этом значении по умолчанию, поэтому отправляет значение по умолчанию .NET в базу данных. Можно заставить EF использовать значение по умолчанию из БД, но вы должны вручную изменить файл EDMX (XML не конструктор). Необходимо найти определение столбца в SSDL-части EDMX и добавить атрибут StoreGeneratedPattern = "Computed". Вы также должны сделать то же самое в CSDL-части (это можно сделать в дизайнере).

У этой настройки будет несколько проблем. Прежде всего каждое обновление из базы данных удалит ваши изменения в SSDL. Также каждая вставка и обновление будут вызывать select, который будет запрашивать значение из этого столбца (потому что EF считает, что оно вычисляется каждый раз).

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