Вы можете попытаться изменить свои сущности, указав составной ключ для PhoneNumber, который будет состоять из идентификатора PhoneNumber и внешнего ключа для клиента:
public class Customer
{
[Key]
public int CustomerId { get; set; }
public ICollection<PhoneNumber> phones { get; set; }
}
public class PhoneNumber
{
[Key, ForeignKey("Customer"), Column(Order = 1)]
public int CustomerId { get; set; }
[Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PhoneNumberId { get; set; }
public string Number { get; set; }
public string Type { get; set; }
public Customer customer { get; set; }
}
Чтобы настроить составной ключ, используйте настройку Fluent API в переопределенном методе DbConext.OnModelCreating:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PhoneNumber>()
.HasKey(c => new { c.CustomerId, c.PhoneNumberId });
}
Обновите вашу базу данных: Add-миграция, Update-Database.
Затем, после получения сущностей в вашем API, вы можете обновить коллекции Customer и child, например:
Customer cs = new Customer();
cs.CustomerId = 1;
cs.name = "gg";
cs.phones = new List<PhoneNumber>();
cs.phones.Add(new PhoneNumber() { CustomerId = 1, Number = "12", Type = "gg" });
cs.phones.Add(new PhoneNumber() { CustomerId = 1, Number = "44", Type = "TT" });
var customer = db.customers.Include("phones").Single(o => o.CustomerId == cs.CustomerId);
customer.phones = cs.phones;
db.SaveChanges();