Как установить значение по умолчанию для 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 для вас.
  • Учебники ADO.NET Entity Framework
  • Создание поля First Date Framework
  • EF, включая другие объекты (шаблон общего репозитория)
  • Улучшать имена свойств навигации при обратном проектировании базы данных
  • Принудительно использовать код для инициализации несуществующей базы данных?
  • EF Code First "Недопустимое имя столбца« Дискриминатор », но без наследования
  • Метод DbSet.Find смехотворно медленный по сравнению с .SingleOrDefault для ID
  • Код структуры Entity Framework Сначала используйте Guid как идентификатор с другой колонкой Identity
  • как обновить объект в Entity Framework 4 .NET
  • Ключевое слово не поддерживается: 'server'
  • Как я могу запросить нулевые значения в структуре сущностей?
  • Interesting Posts

    Управление дисками Windows не разрешает «Удалить тома» и «Увеличить объем»

    Как заставить Share Intent открыть конкретное приложение?

    Целевое поле в ярлыке Windows отключено

    Синхронизация Google, Календарь и контакты Outlook

    Некоторое уточнение, необходимое для синхронных и асинхронных операций asio

    Представление должно выводиться из WebViewPage или WebViewPage

    Возможно ли иметь возможность правильно выбрать любую доступную учетную запись Google для использования при авторизации через клиентскую библиотеку JS для Диска?

    Почему pinging «drive» получает ответы от 127.0.53.53?

    Есть ли команда, например, «смотреть» или «inotifywait» на Mac?

    Какова цель статического ключевого слова в параметре массива функции типа «char s »?

    Что такое NSNotification?

    MP3 vs M4A (AAC): что такое аудиокодек для портативных устройств, который обеспечивает максимальную независимость?

    Как перечислить подколлекции в документе Cloud Firestore

    Как загрузить большое количество файлов через ubuntu

    Пожар кода Firebase

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