В моем приложении я использую 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