#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), назначьте этот существующий цвет перед сохранением