C# и Entity Framework : прекратите добавлять дубликаты

#c# #entity-framework

Вопрос:

У меня есть занятие

 public class SetParts
{
    public int id { get; set; }
    public Part part { get; set; }
    public Color color { get; set; }
    public int quantity { get; set; }
}
 

Часть бытия

 public class Part
{
    public int id { get; set; }
    public string part_num  { get; set; }
    public string name { get; set; }
}
 

и Цвет бытия

 public class Color
{ 
    public int id { get; set; }
    public string name { get; set; }
    public string rgb { get; set; }
}
 

Я получаю список из API «Частей набора», но разные могут содержать тот же «Цвет», что и другая «Часть набора» (то же самое относится к «Части»).

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я добавляю «SetParts», он дублирует цвет…. и детали

Как я могу легко остановить это?

РЕДАКТИРОВАТЬ: Каждый извлеченный набор деталей уникален, но они могут содержать один и тот же цвет и детали. Деталь и цвет в этом случае идентичны (одинаковые идентификаторы).

 using (var db = new DBContext())
{
    db.AddRange(data); 
    db.SaveChanges();
}
 

данные-это список, полученный с помощью API

Комментарии:

1. Покажите нам код, который вызывает дублирование, пожалуйста;

2. когда вы получаете цвета из API — какие id у них есть цвета? также: пожалуйста, поделитесь дополнительной информацией о вашей настройке базы данных и о том, как вы на самом деле добавляете материал. без показа вашего кода мы не сможем отладить ваш код…….

3. В дополнение к исправлению кода, чтобы не создавать дубликатов, вам необходимо исправить свою модель, чтобы предотвратить их. Каждый из них должен иметь уникальный индекс, чтобы предотвратить дубликаты. НАПРИМЕР Part.Part_Num , Color.Name .

4. Пожалуйста, потратьте некоторое время на чтение соглашений об именах C# . PropertyNamesShouldUsePascalCase, классы не должны иметь имен во множественном числе

Ответ №1:

Как я могу легко остановить это?

Извлеките существующий цвет из базы данных или используйте идентификатор существующего цвета и установите его (для классов, которые сопоставляются с помощью свойства ColorID на дочернем конце).

Прямо сейчас вы, вероятно, просто позволяете API предоставить набор элементов синего цвета и сохранить его, а затем другой набор элементов другого синего цвета и сохранить его тоже..

Они не будут дубликатами (у них будут разные идентификаторы), но, вероятно, все они будут синими.. БД делает только то, что вы ей говорите; если вы хотите использовать существующий цвет (например, синий с идентификатором=1), назначьте этот существующий цвет перед сохранением