my current project is based on Entity Framwork code-first. I have three types: Task, TaskType and Module.
public class Task
{
public int ID {
If you don't use the same context instance to load related entities you cannot simply add them to the new entity and expect that existing records in the database will be used. The new context doesn't know that these instances exist in the database - you must to say it to the context.
Solutions:
Added to UnchangedExample for 1:
var module = context.Modules.SingleOrDefault(m => m.ID == 1);
var taskType = context.TaskTypes.SingleOrDefault(t => t.ID == 1);
Task task = new Task();
task.Module = module;
task.Type = taskType;
context.Tasks.Add(task);
Example for 2:
var module = new Module { Id = 1 };
var taskType = new TaskType { Id = 1 };
context.Modules.Attach(module);
context.TaskTypes.Attach(taskType);
Task task = new Task();
task.Module = module;
task.Type = taskType;
context.Tasks.Add(task);
Example for 3:
var module = otherContext.Modules.SingleOrDefault(m => m.ID == 1);
otherContext.Entry(module).State = EntityState.Detached;
var taskType = otherContext.TaskTypes.SingleOrDefault(t => t.ID == 1);
otherContext.Entry(taskType).State = EntityState.Detached;
context.Modules.Attach(module);
context.TaskTypes.Attach(taskType);
Task task = new Task();
task.Module = module;
task.Type = taskType;
context.Tasks.Add(task);
Example for 4:
var module = otherContext.Modules.SingleOrDefault(m => m.ID == 1);
otherContext.Entry(module).State = EntityState.Detached;
var taskType = otherContext.TaskTypes.SingleOrDefault(t => t.ID == 1);
otherContext.Entry(taskType).State = EntityState.Detached;
Task task = new Task();
task.Module = module;
task.Type = taskType;
context.Tasks.Add(task);
context.Entry(module).State = EntityState.Unchanged;
context.Entry(taskType).State = EntityState.Unchanged;