Ваш код должен работать с конфигурацией по умолчанию вашего DbContext
.Одним из возможных объяснений того, что это не работает, является то, что у вас отключено автоматическое обнаружение изменений, например, если в конструкторе вашего контекста есть что-то вроде:
public DataContext()
{
this.Configuration.AutoDetectChangesEnabled = false;
}
В этом случае EF не обнаружит изменение навигациисвойство newItem.CreatedBy
после добавления нового элемента в контекст.(SaveChanges
обнаружит это последнее изменение, если обнаружение изменений не отключено.)
Вы можете изменить свой код таким образом, чтобы настройка свойства навигации выполнялась до добавления нового элемента в контекст:
using (var ctx = new DataContext())
{
ctx.Users.Attach(existingUser);
// create item and add to context
var newItem = new MyItem();
// set related entity
newItem.CreatedBy = existingUser;
ctx.MyItems.Add(newItem);
ctx.SaveChanges();
}
Это должно работать с автоматическим обнаружением изменений и без него.