tags:

views:

475

answers:

2

This error is being generated when I try to change a foreign key. I know this is a very common error I’ve found tons of information about it and tried to implement the fixes I’ve found but I still get this error when trying to update Keys. Reference Thread

Originally I was just directly assigning the value and not trying to map the entities.

ticket.assigned_to_group = assigned_to

I’ve since changed to try and map the entities which I believe the correct answer; however I still get the error.

ticket.assigned_to_group = db.sub_units.Single(f => f.id == assigned_to).id;

Any idea why this would not work. Also if I have a table with multiple foreign keys, do I really need to do a new query for each key or is there a better way?

+5  A: 

I think you are trying to assign an ID when you need to assign the entity. (I'm not 100% sure this is what you are doing)

// Don't assign just the id
Person.ParentId = parentId;

// Assign the entity
Person.Parent = db.Parents.Single(x.Id == parentId);
Jon Erickson
Ah you are correct I was still trying to assign the ID a new value instead of assigning the entity. This now works:t.sub_unit = db.sub_units.Single(f => f.id == assigned_to)
Tim
This (in my case) is only an issue when the Id is not nullable, updating nullable ids via assigning only a new id works ok. Why is this the case?
CRice
A: 

For your second question , you can load all the sub_units by

var groups = db.sub_units.ToArray() and once in memory do something like this:

foreach(var ticket in tickets)
{
    ticket.assigned_to_group = groups.Single(f => f.id == assigned_to);
}
Gregoire
Thats not exatcly what I ment.The ticket class has FK's to several other tables besides the 'sub_units'/assigned_to_group table.key. ticket.priority1 = db.priorities.Single(p => p.id == priority_id); ticket.sub_unit = db.sub_units.Single(f => f.id == assigned_to); Or will I need to do that for each related table.
Tim