Я думаю, что ошибка здесь
public int? Id { get; set; }
Идентификатор не должен быть обнуляемым.
Обновление: Я имею в виду, что вы должны написать:
public int Id { get; set; }
Знак вопроса делает ваше свойство обнуляемым, но так как оно является первичным ключом, оно не может быть нулевым.
Я сделал небольшой пример здесь:
using System.Collections.Generic;
namespace ConsoleApp2.Models
{
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Office> Offices { get; set; }
}
}
СвободноApi
migrationBuilder.CreateTable(
name: "Locations",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Name = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Locations", x => x.Id);
});
Я могу добавить новое местоположение без проблем.
using ConsoleApp2.Models;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
MyDbContext _c = new MyDbContext();
List<Office> list = new List<Office>()
{
new Office()
{
OfficeName = "Reception"
}
};
Location l = new Location()
{
Name = "New York",
Offices = list
};
_c.Locations.Add(l);
_c.SaveChanges();
}
}
}
Я использую .net core 2.1 с EFcore 2.2.2.
Надеюсь, это поможет.