У меня есть 3 стола Goods
, Producer
, Categories
. Producer
и Categories
имеют отношение «один ко многим» с Goods
, и у меня есть общий метод вставки, приведенный ниже.Как управлять вставкой EF в базу данных?
Проблема в том, что когда я пытаюсь вставить список товаров, сначала добавляется правильно, но если у следующего есть категория с одинаковым идентификатором, это исключает первичный ключ.
Но я хочу, чтобы вставить что-то вроде, проверяя каждый раз перед вставкой таблиц Categories
и Producer
, а если строка уже существует, просто обновите ее, например, или пропустите.
код с моделями и мой общий вкладыш здесь:
public class Good
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public virtual Category Category { get; set; }
public virtual Producer Producer { get; set; }
public override string ToString()
{
return Id + "/" + Name + "/" + Price + "/" + Category.Name + "/" + Producer.Name + "/" + Producer.Country;
}
}
public class Producer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public virtual ICollection<Good> Goods { get; set; }
public override string ToString()
{
return Id + "/" + Name + "/" + Country;
}
}
public class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Good> Goods { get; set; }
public override string ToString()
{
return Id + "/" + Name;
}
}
public void AddList(List<T> collection, DbContext GoodsContext)
{
foreach (var item in collection)
{
GoodsContext.Set<T>().Add(item);
GoodsContext.SaveChanges();
}
}
Можете ли вы объяснить, как выглядеть как InsertOrUpdateGraph для моего решения? Я создал сопоставления и добавил операции с графиком, но все же не могу повлиять на то, как insertorupdate будет выглядеть. – vtarbinskyi
@Demsaas Вы должны добавить 'using EntityGraphOperations;' Вы можете загрузить и проверить образец проекта из codeproejct. –
Хорошо, добавив сначала один путь, как вы сказали, а во втором - исключение: последовательность не содержит соответствующий элемент; – vtarbinskyi