Я думаю, что вы получаете подобные исключения, если вы пытаетесь получить отношение внешнего ключа для одной и той же сущности дважды. Вот простой пример:
var tn = ctx.TableName.Where(t => t.TableNameId == 1).First();
var rel = new RelateTableName {TableName = tn, TableNameId = 2};
ctx.RelateTableName.AddObject(rel);
Здесь вы можете видеть, что я установил для свойства TableNameId значение 2, а для свойства TableName - объект с TableNameId, равным 1, поэтому структура сущности не может определить, какое отношение является правильным для размещения в базе данных.