ho le seguenti classi:Salvataggio relazione molti a molti - Entity Framework
public class item
{
public int NodeID
{
get ;
set ;
}
public int Weight
{
get ;
set ;
}
public int Category
{
get ;
set ;
}
}
public class Recipients
{
public int RecipientID
{
get ; set;
}
}
public class Nodes
{
public List<int> RecipientList
{
get ;
set ;
}
public item Item
{
get ; set;
}
public int Capacity
{
get ; set;
}
public int NodeID
{
get ; set;
}
public int Weight
{
get ; set;
}
public int Category
{
get ; set;
}
}
E ho cercato di salvarla nel mio DB esistente che ha le seguenti tabelle:
1) Category
2) Items
3) Nodes (Node and Items has 1-1 relationship)
4) Recipients
5) NodeRecipients (This table show the many to many relationship between Nodes and Recipients)
Io uso VS2012 per creare un modello EF come illustrato dallo schema seguente (notare che Nodi deriva da Articoli nell'EF)
Ho un metodo che cerca di salvare i nodi ed i suoi destinatari
public void SaveNodeAndRecipient(List<Nodes> MyNodes)
{
using (var db = new MyEntities())
{
foreach (var n in MyNodes)
{
Node n1 = new Node() { NodeID = n.NodeID, categoryID = n.Category, Capacity = n.Capacity };
db.Items.Add(n1);
foreach (var r in n.RecipientList)
{
Recipient rep;
if (!db.Recipients.Select(x => x.recipientID).Contains(r))
{
rep = new Recipient() { recipientID = r };
db.Recipients.Add(rep);
}
else
{
rep = db.Recipients.Where(x => x.recipientID == r).FirstOrDefault();
}
Node_Recipient nr = new Node_Recipient(){RecipientID=r,NodeID=n.NodeID};
n1.Node_Recipient.Add(nr);
}
}
db.SaveChanges();
}
}
MyEntities è il modello EF ed è stato dichiarato nel appconfig:
<connectionStrings>
<add name="MyEntities" connectionString="xxxxx" providerName="System.Data.EntityClient" />
</connectionStrings>
Tutto è andato bene e compilato senza alcun problema fino a quando non ho provato a fare il savechanges. Ho ottenuto questo errore (non molto descrittivo)
Chiunque sa che cosa sta succedendo? Ho l'impressione che il rapporto tra molti e molti sia il colpevole, ma non è in grado di individuare ciò che lo sta causando. Per favore aiuto!
Hit 'Visualizza dettagli ...' per vedere l'eccezione interna. – nekno
Rilascia il DB e riprova. A meno che non si inseriscano le Migrazioni o si lasci sempre il DB, ogni volta che si cambiano i modelli si otterrà l'errore DbUpdate – Tico
@nekno: Eccezione interna verificata e ottenuto questo: l'istruzione INSERT è in conflitto con il vincolo FOREIGN KEY "FK_Node-Recipient_Recipient". Il conflitto si è verificato nel database "MyEntities", nella tabella "dbo.Recipient", nella colonna "recipientID". La dichiarazione è stata chiusa. – user1205746