Я создаю новый WebAPI на ASP.Net Core 2.2, и мне нужно определить отношения между двумя моделями в SQL Server:
Car
public class Car
{
[Key]
public Guid CarId { get; set; }
public string Brand { get; set; }
public Guid OwnerId { get; set; }
public Owner Owner { get; set; }
}
Owner
public class Owner
{
[Key]
public Guid OwnerId { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public IEnumerable<Car> Cars { get; set; }
}
Это метод Post в CarsController
private const string AlexGuid = "21fd1de8-ce31-4224-b0b1-39e3f9dbaa18";
...
[HttpPost(ApiRoutes.Cars.Create)]
public async Task<IActionResult> Add([FromBody] CreateCarRequest carRequest)
{
var car = new Car { Brand = carRequest.Brand };
if (car.CarId == Guid.Empty)
{
car.CarId = Guid.NewGuid();
}
if (car.Owner.OwnerId == Guid.Empty)
{
car.OwnerId = Guid.Parse(AlexGuid);
}
await _carService.AddCarAsync(car);
var baseUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host.ToUriComponent()}";
var locationUri = baseUrl + "/" + ApiRoutes.Cars.Get.Replace("{carId}", car.CarId.ToString());
var response = new CarResponse { CarId = car.CarId };
return Created(locationUri, response);
}
Ошибка возникает в этой строке кода:
await _carService.AddCarAsync(car);
DataContext
класс:
public class DataContext : IdentityDbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
}
public DbSet<Car> Cars { get; set; }
public DbSet<Owner> Owners { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Owner>()
.HasMany(c => c.Cars)
.WithOne(e => e.Owner);
}
}
CarService
метод класса:
public async Task<bool> AddCarAsync(Car car)
{
await _dataContext.Cars.AddAsync(car);
var added = await _dataContext.SaveChangesAsync();
return added > 0;
}
Произошло необработанное исключение при выполнении запроса.
Microsoft.EntityFrameworkCore.DbUpdateException: при обновлении записей произошла ошибка. Смотрите внутреннее исключение для деталей. ---> System.Data.SqlClient.SqlException: оператор INSERT вступил в конфликт с ограничением FOREIGN KEY "FK_Cars_Owners_OwnerId". Конфликт произошел в базе данных «CarOwnersDB», таблице «dbo.Owners», столбце «OwnerId».