Ну, это интересно.
Я предполагаю, что Blog.BlogEntries
является обратной величиной BlogEntry.Blog
Я также предполагаю, что все свойства всех классов являются виртуальными, поэтому EF может прокси-классы.
С учетом этих предположений некоторые объекты будут проксироваться (user
и user.Blog
), потому что ObjectContext
их построил, а некоторые не будут проксироваться (entry
), потому что вы создали их сами.
Прокси-классы автоматически исправляются, т.е. синхронизируют оба конца отношений
Это делается на прокси-пользователе. Блог:
user.Blog.BlogEntries.Add(entry)
автоматически установит entry.Blog
на user.Blog
в одно и то же время, чтобы синхронизировать обе связи.
С другой стороны, потому что entry
не прокси это:
entry.Blog = user.Blog
не исправит ошибки.
Итак, в этом коде вы, по сути, дважды делаете половину исправления. Мы, вероятно, должны изящно справиться с этой ситуацией, но, очевидно, что нет, я буду обсуждать это с командой.
Сказав все это, я предлагаю вам сделать что-то немного проще:
// notice there is no need to get the User just the users blog
var blog = (from u in context.Users
where u.Id == 1
select u.Blog).Single();
и просто сделайте это:
BlogEntry entry = new BlogEntry();
entry.Header = "Test Entry";
entry.Text = "Test Text blah blah blah";
entry.CreatedAt = DateTime.Now;
entry.Blog = blog;
//because BlogEntry inherits from Post if I remember your model
context.Posts.Add(entry);
context.SaveChanges();
Это должно работать.
Alex