EF Core - невозможно вставить явное значение для столбца идентификаторов SqlException - PullRequest
0 голосов
/ 02 января 2019

В моем приложении я использую EF Core, чтобы определить 2 объекта (Code First), Meeting и PostcodeDetail, определенные следующим образом:

public class Meeting
{
  public int Id { get; set;}
  public PostcodeDetail PostcodeDetail { get; set; }

  // other properties removed for brevity
}

public class PostcodeDetail
{
  public int Id { get; set; }
  public ICollection<Meeting> Meetings { get; set; } = new List<Meeting>();

  // other properties removed for brevity
}

Когда я создаю новый Meeting и пытаюсьназначая существующую сущность PostcodeDetail следующим образом:

var meeting = new Meeting();
var details = context.PostcodeDetails
                        .SingleOrDefault(i => i.Prefix == prefix);

meeting.PostcodeDetail = details;
context.SaveChanges();

Я получаю это исключение:

Microsoft.EntityFrameworkCore.DbUpdateException: SqlException: невозможно вставить явное значение для столбца идентификации втаблица 'PostcodeDetail', когда для IDENTITY_INSERT установлено значение OFF

Я не могу понять, почему оператор вставки выполняется на PostcodeDetail, так как я получаю существующую сущность из базы данных - может кто-нибудь увидеть, чтоЯ делаю не так?

Редактировать: Когда я запускаю SQL Server Profiler, я вижу, что выполняется следующее

INSERT INTO [PostcodeDetail] ([Id], [DateCreated], [DateModified], [District], [Prefix], [Region]) VALUES (@ p0, @ p1, @ p2, @ p3, @ p4, @ p5);', N' @ p0 int, @ p1 datetime2 (7), @ p2 datetime2 (7), @ p3 nvarchar (4000), @ p4 nvarchar (4000), @ p5 nvarchar (4000) ', @ p0 = 113, @p1 = '2019-01-02 15: 50: 49.5874691', @ p2 = '2019-01-02 15: 50: 49.5874640', @ p3 = N'Guernsey ', @ p4 = N'GY', @ p5 =N'Channel Islands '

Я не знаю, почему создается вставка, так как я получаю PostcodeDetail из базы данных и ссылаюсь на него в новом Meeting

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Причиной этой проблемы было то, что я звонил SaveChanges в другом контексте, в котором я создавал объект.

0 голосов
/ 02 января 2019

может быть, вы пытаетесь явно присвоить значение столбцу, которому его автоматически назначает база данных. или вы создали не идентифицирующее поле PK в таблице. Вы можете установить это так enter image description here

или вы также можете сделать это с помощью полей идентификации:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...