Error when adding new entity to EF : A referential integrity constraint violation occurred
c#, entity-framework-5
Solution
Found out how to get around though it doesn't explain why the error occurs :
// the context class
AccountingModelContext db = new AccountingModelContext();
// query some data
List<Reconciliation> recon = db.Reconciliations
.Where(r => r.ReconNum == 112293) // scenario 18
.Include(r => r.ReconciliationDetails.Select(rd => rd.JrnlEntryDetail).Select(jd => jd.JrnlEntry).Select(j => j.ARInvoices.Select(i => i.ARInvoiceDetails)))
.Include(r => r.ReconciliationDetails.Select(rd => rd.JrnlEntryDetail).Select(jd => jd.JrnlEntry).Select(j => j.ARCredMemoes.Select(c => c.ARCredMemoDetails)))
.ToList();
// class that will manager business logic and generate facts with above data
ReconFactGenerator generator = new ReconFactGenerator(recon);
// call to the method that will return a list of facts
List<ReconFact> scenario18 = generator.GenerateFacts();
// ERROR RAISED HERE
// scenario18.ForEach(f => db.ReconFacts.Add(f));
// INSTEAD OF REUSING THE CONTEXT I CREATE A NEW ONE PROBLEM SOLVED !
using (db = new AccountingModelContext())
{
scenario18.ForEach(f => db.ReconFacts.Add(f));
db.SaveChanges();
}
db.SaveChanges();
Problem
I'm adding a new entity that is built through an external class and I get this error : `A referential integrity constraint violation occurred: A primary key property that is a part of referential integrity constraint cannot be changed when the dependent object is Unchanged unless it is being set to the association's principal object. The principal object must be tracked and not marked for deletion.` : Edit : The `ReconFact` entity is not linked to any other entities The code (edited) : ``` // the context class AccountingModelContext db = new AccountingModelContext(); // query some data List<Reconciliation> recon = db.Reconciliations .Where(r => r.ReconNum == 112293) // scenario 18 .Include(r => r.ReconciliationDetails.Select(rd => rd.JrnlEntryDetail).Select(jd => jd.JrnlEntry).Select(j => j.ARInvoices.Select(i => i.ARInvoiceDetails))) .Include(r => r.ReconciliationDetails.Select(rd => rd.JrnlEntryDetail).Select(jd => jd.JrnlEntry).Select(j => j.ARCredMemoes.Select(c => c.ARCredMemoDetails))) .ToList(); // class that will manager business logic and generate facts with above data ReconFactGenerator generator = new ReconFactGenerator(recon); // call to the method that will return a list of facts List<ReconFact> scenario18 = generator.GenerateFacts(); // ERROR RAISED HERE scenario18.ForEach(f => db.ReconFacts.Add(f)); // never reached db.SaveChanges(); ``` It's very basic I build a list of `ReconFact`entities with `ReconFactGenerator`class. No ID's are specified as they are new entities. edited It works perfectly if I create a new entity in the same method like here Before I query data from the context : ``` ReconFact testfact = new ReconFact { ItemCode = "test", ReconNum = 1234, ReconDate = DateTime.Parse("2099-01-01"), ShortName = "L_SZTREDFD", InvoiceAmount = 0, CredMemoAmount = 0, IncomingPayAmount = 0, OutgoingPayAmount = 0, JrnlEntryAmount = 0, OtherAmount = 0 }; db.ReconFacts.Add(testfact); // no problems no error raised db.SaveChanges(); // I can see the new record in my database // the ID was generated successfully // as I've specified identity(1,1) in the database ``` Added Edit 2 After I query data from the context like this : ``` List<Reconciliation> recon = db.Reconciliations .Where(r => r.ReconNum == 112293) // scenario 18 .Include(r => r.ReconciliationDetails.Select(rd => rd.JrnlEntryDetail).Select(jd => jd.JrnlEntry).Select(j => j.ARInvoices.Select(i => i.ARInvoiceDetails))) .Include(r => r.ReconciliationDetails.Select(rd => rd.JrnlEntryDetail).Select(jd => jd.JrnlEntry).Select(j => j.ARCredMemoes.Select(c => c.ARCredMemoDetails))) .ToList(); ``` The context is not able to save anymore returning the above error. edited Why is an error raised when I want to save after I query the context and raises no error before ?