Ввод ключей вручную с помощью Entity Framework
Описание проблемы:
Я пытаюсь использовать Entity Framework с подходом "code first" для простого проекта базы данных, и столкнулся с проблемой, которую не могу решить.
Я заметил, что EF автоматически устанавливает значение ID для моих таблиц, увеличивая его на 1 каждый раз и полностью игнорируя значение, которое я ввел вручную для этого поля. После некоторых поисков, я понял, что правильный способ отключить это поведение — использовать следующий код:
modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Однако теперь я получаю следующую ошибку и не понимаю, почему:
Unhandled Exception:
System.Data.Entity.Infrastructure.DbUpdateException: An error
occurred while updating the entries. See the inner exception for
details. ---
System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. --->
System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'Events' when IDENTITY_INSERT is set to OFF.
Если это поможет, вот класс POCO, о котором идет речь:
public class Event
{
[Key, Required]
public int EventID { get; set; }
public string EventType { get; set; } //TODO: Event Type Table later on
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual ICollection<Match> Matches { get; set; }
public virtual ICollection<EventParticipation> EventParticipation { get; set; }
}
Заранее спасибо за помощь.
1 ответ(ов)
Вы можете использовать аннотации данных для настройки свойств в вашей модели. Если вы предпочитаете атрибуты, вот альтернативное решение для полноты картины:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
Обратите внимание: это также работает в EF Core.
Самый Быстрый Способ Вставки в Entity Framework
Не удается обновить EntitySet: определен DefiningQuery, но отсутствует элемент <UpdateFunction>
Запрос прерван: Не удалось создать безопасный канал SSL/TLS
Обмен сессиями между приложениями с использованием службы состояния сессии ASP.NET
Как запустить модульные тесты на платформе x64?