Как установить значение по умолчанию для POCO в EF CF?

В интерфейсе Entity Framework Code First, как вы устанавливаете значение по умолчанию для свойства в classе EntityConfiguration POCO?

public class Person { public int Id { get; set; } public string Name { get; set; } public DateTime CreatedOn { get; set; } } public class PersonConfiguration : EntityConfiguration { public PersonConfiguration() { Property(p => p.Id).IsIdentity(); Property(p => p.Name).HasMaxLength(100); //set default value for CreatedOn ? } } 

С выпуском Entity Framework 4.3 вы можете сделать это через Migrations.

EF 4.3 Первый шаг по миграции

Поэтому, используя ваш пример, это будет примерно так:

 public partial class AddPersonClass : DbMigration { public override void Up() { CreateTable( "People", c => new { Id = c.Int(nullable: false, identity: true), Name = c.String(maxLength: 100), CreatedOn = c.DateTime(nullable: false, defaultValue: DateTime.UtcNow) }) .PrimaryKey(t => t.Id); } public overide void Down() { // Commands for when Migration is brought down } } 

Вы можете установить значения по умолчанию через конструктор для classа. Вот class, который у меня есть в моем текущем проекте, используя MVC3 и Entity Framework 4.1:

 namespace MyProj.Models { using System; using System.Collections.Generic; public partial class Task { public Task() { this.HoursEstimated = 0; this.HoursUsed = 0; this.Status = "To Start"; } public int ID { get; set; } public string Description { get; set; } public int AssignedUserID { get; set; } public int JobID { get; set; } public Nullable HoursEstimated { get; set; } public Nullable HoursUsed { get; set; } public Nullable DateStart { get; set; } public Nullable DateDue { get; set; } public string Status { get; set; } public virtual Job Job { get; set; } public virtual User AssignedUser { get; set; } } } 

Я знаю, что эта тема продолжается некоторое время, и я вошел в ту или иную проблему. До сих пор я не мог найти решение для меня, которое держит все вместе в одном месте, поэтому код все еще доступен для чтения.

При создании пользователя я хочу, чтобы некоторые поля устанавливались самим объектом через private setters , например GUID и Дата создания, а не «загрязняли» конструктор.

Мой class пользователя:

 public class User { public static User Create(Action init) { var user = new User(); user.Guid = Guid.NewGuid(); user.Since = DateTime.Now; init(user); return user; } public int UserID { get; set; } public virtual ICollection Roles { get; set; } public virtual ICollection Widgets { get; set; } [StringLength(50), Required] public string Name { get; set; } [EmailAddress, Required] public string Email { get; set; } [StringLength(255), Required] public string Password { get; set; } [StringLength(16), Required] public string Salt { get; set; } public DateTime Since { get; private set; } public Guid Guid { get; private set; } } 

Код звонка:

 context.Users.Add(User.Create(c=> { c.Name = "Name"; c.Email = "[email protected]"; c.Salt = salt; c.Password = "mypass"; c.Roles = new List { adminRole, userRole }; })); 

Я не уверен, какая версия EF станет доступной, но с версии 5 вы наверняка справитесь с этим. Просто установите значение GetDate () по умолчанию в столбце SQL, либо в TSQL, либо в конструктор, а затем настройте classы EF следующим образом:

 public class Person { public int Id { get; set; } public string Name { get; set; } public DateTime CreatedOn { get; set; } } public class PersonConfiguration : EntityConfiguration { public PersonConfiguration() { Property(p => p.Id).IsIdentity(); Property(p => p.Name).HasMaxLength(100); this.Property(p => p.CreatedOn ).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed); } } 

Обратите внимание, что вам не нужно указывать нулевой столбец базы данных или свойство POCO.

В случае, если SQL Server должен предоставить дату по умолчанию, как вы это сделаете, важной частью является defaultValueSql: «GETDATE ()», которая установит значение по умолчанию для SQL Server, а не просто оценит время выполнения сценария (например, DateTime.UtcNow)

  public partial class AddPersonClass : DbMigration { public override void Up() { CreateTable( "People", c => new { Id = c.Int(nullable: false, identity: true), Name = c.String(maxLength: 100), CreatedOn = c.DateTime(nullable: false, defaultValueSql: "GETDATE()") }) .PrimaryKey(t => t.Id); } public overide void Down() { // Commands for when Migration is brought down } } 

Нет другого способа, кроме использования БД-МИГРАЦИЙ, и для включения миграций вы должны установить свое свойство следующим образом

 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime CreatedOn { get; set; } 

И после этого, как только ваша firebase database будет создана, вы должны выполнить следующие шаги, чтобы включить миграцию. Перейдите в консоль диспетчера программ и выполните следующие команды по одной команде

  • PM> Enable-Migrations
  • PM> Add-Migration AlterMyTable Здесь AlterMyTable может быть любым именем. это создаст файл в недавно добавленной папке Migrations в вашем решении currentTimestamp_AlterMyTable.cs -Накопируйте следующее в метод Up currentTimestamp_AlterMyTable.cs
  • AlterColumn("Person", "CreatedOn", n => n.DateTime(nullable: false, defaultValueSql: "SYSUTCDATETIME()")); И после этого выполните последнюю команду в консоли программы Manager
  • PM> Update-Database Теперь, если вы видите таблицу Person в своей базе данных, а затем перейдите к столбцу CreatedOn она должна иметь значение по умолчанию как SYSUTCDATETIME() то есть теперь, если вы попытаетесь вставить некоторые данные в эту таблицу, ваша firebase database будет автоматически обновите этот столбец CreatedOn для вас.
  • EF, включая другие объекты (шаблон общего репозитория)
  • Первоначальное понимание атрибута ForeignKey в коде структуры сущности
  • Лучший способ проверить, существует ли объект в Entity Framework?
  • Entity Framework слишком медленная. Какие у меня варианты?
  • EF 4.1 загрузка фильтрованных дочерних коллекций, не работающих для многих-ко-многим
  • Как разогревать приложение ASP.NET MVC на IIS 7.5?
  • Код структуры Entity сначала удаляется с помощью каскада
  • Как включить EF-миграции для разных контекстов для разделения баз данных?
  • Организационно, где я должен ставить общие запросы при первом использовании кода Entity Framework?
  • Установка значения по умолчанию для свойства DateTime в DateTime.Now внутри значения System.ComponentModel Default Attrbute
  • Перенос EF для изменения типа данных столбцов
  • Interesting Posts

    Есть ли способ проинструктировать Windows игнорировать механический переключатель «только для записи» на SD-картах?

    Как управляется память CUDA?

    Изменить путь для OS X

    Какие веб-frameworks Scala доступны?

    sed с ошибкой «unknown option to` s »

    Как добавить Python к пути Windows

    Mac – резервное копирование только определенной папки с использованием машины времени

    Что-то кажется неправильным в макете, JButton показывает неожиданное поведение при изменении размера windows

    Как установить атрибут переднего плана для другого представления non FrameLayout

    Android: очистить кеш всех приложений?

    Как объединить правила фильтрации в фильтрах сообщений в Thunderbird для создания более продвинутых критериев фильтра?

    Как копировать ТОЛЬКО те файлы, которые не находятся в пункте назначения?

    Получить текст после элемента span с помощью jquery

    Как хранить DNS-кеш в случае отказа DNS-сервера?

    Альтернатива пакету bcmwl-kernel-source

    Давайте будем гением компьютера.