EF 6 хранит пустые значения в столбцах со значением по умолчанию - PullRequest
0 голосов
/ 11 марта 2020

У меня есть таблица SQL Server 2014 с 2 datetime столбцами (CreateDate и ModifyDate), определенными с датой по умолчанию, как показано здесь:

CREATE TABLE [PurchaseOrder].[PurchaseOrder] 
(
    [PurchaseOrderId] int IDENTITY(500,1) NOT NULL,
    [VendorId] int NOT NULL,
    [CreditTerms] nvarchar(128) NULL,
    [PurchasingAgent] nvarchar(32) NOT NULL,
    [SalesPerson] nvarchar(32) NOT NULL,
    [TotalBeforeTax] decimal (12, 4) DEFAULT 0,
    [Tax] decimal (12, 4) DEFAULT 0,
    [TotalWithTax] decimal (12, 4) DEFAULT 0,
    [Comments] nvarchar(256) NULL,
    [CreateDate] DATETIME2 NULL,
    [ModifyDate] DATETIME2 NULL
);

ALTER TABLE [PurchaseOrder].[PurchaseOrder] 
    ADD CONSTRAINT DF_PurchaseOrderCreateDT DEFAULT GETDATE() FOR CreateDate
go

ALTER TABLE [PurchaseOrder].[PurchaseOrder] 
    ADD CONSTRAINT DF_PurchaseOrderModifyDT DEFAULT GETDATE() FOR ModifyDate
go

Я использую Entity Framework 6 обновить эту таблицу. По какой-то причине столбец ModifyDate не создает дату по умолчанию для вставок. Ниже приведен код C# для вставки Entity Framework:

static public int AddNewPurchaseOrder(PurchaseOrderViewModel aPurchaseOrderViewModel)
{
    PurchaseOrder aPurchaseOrderToAdd = new PurchaseOrder();

    using (RgmSiteDAL RgmSiteDALCtx = new RgmSiteDAL())
    {
        using (DbContextTransaction transaction = RgmSiteDALCtx.Database.BeginTransaction())
        {
            try
            {
                aPurchaseOrderToAdd.VendorId = aPurchaseOrderViewModel.VendorId;
                aPurchaseOrderToAdd.CreateDate = aPurchaseOrderViewModel.CreateDate;
                aPurchaseOrderToAdd.CreditTerms = aPurchaseOrderViewModel.CreditTerms;
                aPurchaseOrderToAdd.PurchasingAgent = aPurchaseOrderViewModel.PurchasingAgent;
                aPurchaseOrderToAdd.SalesPerson = aPurchaseOrderViewModel.SalesPerson;
                aPurchaseOrderToAdd.TotalBeforeTax = aPurchaseOrderViewModel.TotalBeforeTax;
                aPurchaseOrderToAdd.Tax = aPurchaseOrderViewModel.Tax;
                aPurchaseOrderToAdd.TotalWithTax = aPurchaseOrderViewModel.TotalWithTax;
                aPurchaseOrderToAdd.Comments = aPurchaseOrderViewModel.Comments;

                RgmSiteDALCtx.PurchaseOrder.Add(aPurchaseOrderToAdd);

                RgmSiteDALCtx.SaveChanges(); //save parent PurchaseOrder object

                int PurchaseOrderIdentityIdIssued = aPurchaseOrderToAdd.PurchaseOrderId;

Запись вставлена ​​без каких-либо ошибок, но столбец ModifyDate равен нулю вместо того, чтобы текущая дата-время выдавалась из функции getdate() назначается в операторе изменения таблицы. Я не знаю, есть ли проблема с тем, как я устанавливаю дату и время по умолчанию для таблицы, или есть что-то еще, что мне нужно сделать для сущности, у которой есть значения даты и времени, которые должны автоматически создаваться базой данных. Для объекта ModifyDate в объекте не назначено значение даты и времени, потому что я надеялся, что SQL Server сгенерирует текущую дату в качестве значения по умолчанию. Для вставки из веб-приложения CreateDate назначена дата.

Файл edmx в приложении ASP. NET MVC определяет эти 2 даты следующим образом:

    public Nullable<System.DateTime> CreateDate { get; set; }
    public Nullable<System.DateTime> ModifyDate { get; set; }

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

Заранее спасибо.

...