Есть ли в Entity Framework 4 Code First поддержка генераторов идентификаторов, таких как NHibernate?

Этот вопрос, заданный год назад, аналогичен: поддерживает ли Entity Framework 4 генераторы для значений id, таких как NHibernate?

Но то, что я хотел бы знать, это то, что первый CTP-код добавляет поддержку страtagsй генерации идентификаторов. Если нет, кто-нибудь знает хорошую точку расширения в EF для реализации чего-то подобного?

В настоящее время я работаю с classами моделей, которые используют идентификатор GUID в качестве идентификатора. При вставке с использованием EF они сохраняют начальные значения Guid.Empty . Я знаю, что вы можете установить значение по умолчанию для столбца в DB для newid() но это побеждает цель создания идентификации на стороне клиента.

Является ли платформа Entity Framework недостаточно зрелой для использования в распределенной, отключенной системе?

Нет. Первый код структуры Entity – это все-таки хорошая обложка вокруг EFv4. Не существует NHibernate-подобных генераторов. Если вам нужен клиентский Id-генератор, вам придется переопределить SaveChanges в производном DbContext и реализовать свою собственную логику назначения идентификаторов новым объектам.

Редактировать:

Некоторые примеры высокого уровня:

 public class Context : DbContext { // Helper for example // DO NOT USE IN REAL SCENARIOS!!! private static int i = 0; public DbSet MyEntities { get; private set; } public Context() : base("connection") { MyEntities = Set(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasKey(e => e.Id); // Turn off autogeneration in database modelBuilder.Entity() .Property(e => e.Id) .HasDatabaseGeneratedOption(HasDatabaseGeneratedOption.None); // Other mapping } public override int SaveChanges() { foreach (var entry in ChangeTracker.Entries() .Where(e => e.State == EntityState.Added)) { // Here you have to add some logic to generate Id // I'm using just static field entry.Entity.Id = ++i; } return base.SaveChanges(); } } public class MyEntity { public int Id { get; set; } // Other properties } 

Нет.

Mine Entity Framework 4.1.10715, установленная NuGet. возможно, вы можете использовать атрибут

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id {get;set;} 

(Полный список аннотаций, поддерживаемых в EF 4.1: CTRL + F на странице).

 [Key] public string Id { get; set; } 

а затем использовать новый GUID ToString

 Units.Add( new Unit(){Id=Guid.NewGuid().ToString(), Name="123"}); 
  • Отображение типа CLR типа EDM неоднозначно с EF 6 и 5?
  • Является ли DbContext таким же, как DataContext?
  • Entity Framework создает множественное имя таблицы, но представление ожидает уникальное имя таблицы?
  • String.Equals () не работает по назначению
  • Самый эффективный метод дерева привязки с использованием Entity Framework
  • Как преобразовать DbSet в инфраструктуру Entity в ObjectQuery
  • Использование Entity Framework с частной компактной установкой SQL Compact
  • Не удалось выполнить проверку для одного или нескольких объектов. Дополнительную информацию см. В разделе «Свойство EntityValidationErrors».
  • Ошибка API-интерфейса Asp.Net: тип «ObjectContent`1» не смог сериализовать тело ответа для типа контента «application / xml»; кодировка = UTF-8'
  • EF4 Code First: как добавить отношения без добавления свойства навигации
  • Как добавить проверку на мои classы POCO (шаблон)
  • Interesting Posts

    Поддержание открытого соединения Redis с помощью BookSleeve

    Настройка времени ожидания для веб-службы .NET

    Зачем использовать геттеры и сеттеры / аксессоры?

    Что означает «Включить Windows для определения приоритетов внешних манифестаций»?

    Добавление файлов в zip-файл с помощью Java

    Могу ли я сделать чистую установку Windows 8 без записи DVD?

    ООП и функциональное программирование против процедурного

    Настройки удаленного рабочего стола отсутствуют

    Как использовать установленный Vim в Git Bash вместо того, который был с Git?

    Как я могу исправить ошибки «DllRegisterServer entry point not found» в Windows 7?

    Выключение компьютера

    Как игнорировать маркер порядка байтов UTF-8 в сравнении строк?

    Вычислить наибольший прямоугольник во вращающемся прямоугольнике

    Вызывать метод непосредственно перед истечением сеанса

    Google Analytics в приложении для Android – работа с несколькими действиями

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