Я хотел бы добавить много элементов в EF, чтобы поместить их в базу данных, но у меня есть эта ошибка (приведенная в заголовке). Я искал по inte rnet, но нашел только некоторые идеи, основанные на том факте, что элемент нельзя добавить дважды, что кажется логичным. но я позаботился о предоставлении разных идентификаторов (идентификатор - это свойство, которое является ключом в связанной таблице), но это не работает, у меня все еще есть эта ошибка. К настоящему времени я понятия не имею, что может go ошибаться.
Вот данные, которые я пытаюсь передать sh в базу данных, после различных классов моделей:
самый большой контейнер: Supermarche
[DataContract]
public class Supermarche
{
[Key]
[DataMember]
public int SupermarcheId { set; get; }
[DataMember]
public virtual ObservableCollection<Magasin> Magasins { set; get; }
}
, в нем содержится некоторый «Magasin»:
[DataContract]
public class Magasin : ElementSupermarche
{
[Key]
[DataMember]
public int MagasinId { set; get; }
[DataMember]
public string Nom { set; get; }
[DataMember]
public virtual ObservableCollection<Rayon> Rayons { set; get; }
}
, который содержит в себе «Rayon»:
[DataContract]
public class Rayon : ElementSupermarche
{
[Key]
[DataMember]
public int RayonId { set; get; }
[DataMember]
public string Nom { set; get; }
[DataMember]
public virtual ObservableCollection<ProduitMagasin> Produits { set; get; }
}
, который содержит некоторые « ProduitMagasin ":
[DataContract]
public class ProduitMagasin : ElementSupermarche
{
[Key]
[DataMember]
public int ProduitMagasinId { set; get; }
[DataMember]
public string Nom { set; get; }
[DataMember]
public int Quantite { set; get; }
}
последняя, но не в последнюю очередь, заполняющая часть:
using (var ctx = new MarketContext("sqlserver"))
{
new MyDataInitializer().InitializeDatabase(ctx);
var produitMagasin1 = new ProduitMagasin() { Nom = "Pommes", Quantite = 10 };
var produitMagasin2 = new ProduitMagasin() { Nom = "Poires", Quantite = 5 };
var rayon1 = new Rayon() { RayonId = 1, Nom = "Fruits & légumes", Produits = new ObservableCollection<ProduitMagasin>() { produitMagasin1, produitMagasin2 } };
var produitMagasin5 = new ProduitMagasin() { Nom = "pizzas", Quantite = 4 };
var produitMagasin6 = new ProduitMagasin() { Nom = "quiches", Quantite = 8 };
var rayon3 = new Rayon() { RayonId = 2, Nom = "Surgelés", Produits = new ObservableCollection<ProduitMagasin>() { produitMagasin1, produitMagasin2 } };
var magasin1 = new Magasin() { Nom = "Auchan", Rayons = new ObservableCollection<Rayon>() { rayon1, rayon3 } };
ctx.SaveChanges();
var produitMagasin3 = new ProduitMagasin() { Nom = "melons", Quantite = 13 };
var produitMagasin4 = new ProduitMagasin() { Nom = "fraises", Quantite = 37 };
var rayon2 = new Rayon() { RayonId = 3, Nom = "Fruits & légumes", Produits = new ObservableCollection<ProduitMagasin>() { produitMagasin3, produitMagasin4 } };
var magasin2 = new Magasin() { Nom = "Carrefour", Rayons = new ObservableCollection<Rayon>() { rayon2 } };
var supermarche1 = new Supermarche() { Magasins = new ObservableCollection<Magasin> { magasin1, magasin2 } };
ctx.Supermarches.Add(supermarche1);
ctx.SaveChanges();
}
Я не думаю, что это связано, но вот та часть, которая находится в Служба WCF и выполняется сразу после вышеприведенного кода (в другом контексте, но может быть некоторая проблема со временем, может быть, компьютер достигает части извлечения перед тем, как отправить пример информации в базу данных:
using (var ctx2 = new MarketContext("sqlserver"))
{
ctx2.Configuration.ProxyCreationEnabled = false;
var sm = ctx2.Supermarches
.Include(s => s.Magasins.Select(mg => mg.Rayons.Select(r => r.Produits)))
.First();
return sm;
}
спасибо