Значение по умолчанию базы данных не вставляется при создании записи Entity framework

у меня есть таблица LoginRecord в sqlserver 2008 со следующей структурой столбцов -

LoginId      - int, identity
UserId       - int
LoginDateTime- Allow nulls false,default value getdate()

я вставляю новую запись entity framework 6, как показано ниже -

 db.LoginRecords.Add(new LoginRecord() { UserId = UserId }); 
 db.SaveChanges();

но в таблице LoginDateTime вставляется значение null. Это должно быть текущее время.

Я использую первый подход к базе данных.

Как можно преодолеть эту проблему?

3 ответов


объединил мои два комментария в ответ.

попробуйте установить атрибут "StoredGeneratedPattern" вашего datetime в файле EDMX в Computed. Из следующего потока:http://www.stackoverflow.com/a/4688135/2488939

для этого перейдите в конструктор файлов edmx, щелкнув файл edmx. Затем найдите таблицу и свойство. Щелкните правой кнопкой мыши столбец в таблице, который вы хотите изменить, и выберите Свойства. Окно Свойства должно затем придумайте и вы увидите как одно из свойств "StoredGeneratedPattern". Измените это на computed.


в дополнение к изменению файла EDMX, как предложил Вишварам Махарадж, вы должны сделать определение соответствия таблицы между EF и DB. Описание таблицы "LoginDateTime -" разрешить значения null "ложь" - это сама ложь. Поле явно разрешает NULLs, если NULLs вставляются. Измените столбец, чтобы не разрешать NULL, если он действительно не должен иметь нулевых значений:

ALTER TABLE LoginRecords ALTER COLUMN LoginDateTime DATETIME NOT NULL;

установка значений по умолчанию в Entity Framework 5 и 6 путем изменения файла шаблона T4 Сделано ниже изменений .tt (файл шаблона) Образец: красный означает удалить и зеленый означает добавить enter image description here Это добавит конструктор во все классы сущностей с OnCreated методом.

ниже

public partial class Category
{
    public Category()
    {
        this.Products = new HashSet<Product>();
        OnCreated();
    }

    partial void OnCreated();
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

затем создайте файл класса, используя то же пространство имен, что сущностей.

public partial class Category
{
    partial void OnCreated()
    {
        Name = "abc"
    }
}

см. этот https://www.youtube.com/watch?v=i8J2ipImMuU

Helpfull