Замена обособленной детской коллекции EF Core - PullRequest
0 голосов
/ 06 июня 2019
public class PhoneNumber {
  public string Number {get; set;}
  public string Type {get; set;}
}

public class Customer {
   public ICollection<PhoneNumber> phones {get; set;}
}

Я публикую (помещаю) объект Customer в мой webapi.Независимо от того, какие телефонные номера включены в опубликованный объект, это только телефонные номера, которые я хочу сохранить в базе данных.Если в базе данных ранее были номера для этого клиента, я хочу, чтобы они были удалены.

_context.Update(model);

Я пробовал вышеуказанный метод, но он будет только добавлять или редактировать существующие телефонные номера.Числа, которые существуют в БД, но не опубликованы, не удаляются.

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете попытаться изменить свои сущности, указав составной ключ для 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(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...