Платформа сущностей не обнаруживает существующее свойство навигации и пытается повторно добавить его - PullRequest
0 голосов
/ 19 октября 2019

Я определяю свою модель и отношение аналогично объекту blob и публикую пример как на этой странице.

Когда у меня есть существующий blog и я хочу добавить новый postТаким образом, сущностная структура пытается добавить новый blog с каждым добавлением post. Например:

var blog = new Blog(){ Name = "MyBlog" };
context.Blogs.add(blog);
context.SaveChanges();

// now I want to add a post to that blog
var post = new Post() { Name = "MyFirstPost", Blog = blog };
context.Posts.add(post);
context.SaveChanges();

На этом этапе структура сущности пытается создать новый Blog с Name = "MyBlog" и не распознает, что у меня уже есть blog.

Поэтому, когда я смотрю в журналы на context.SaveChanges, я вижу следующее:

INSERT INTO [Blogs] ([ID], [Name])
VALUES (@p0, @p1);

И в этот момент возникает следующее исключение:

Невозможно вставить явное значение для столбца идентификаторов в таблице 'Блоги', когда для IDENTITY_INSERT задано значение OFF.

Очевидно, что он пытается добавить новый Blog с таким идентификатором, как ID = 0, который затем завершается ошибкой, потому что ID генерируется автоматически.

Следовательно, мой вопрос заключается в том, почему EntityFramework не распознает существующий Blog и пытается добавить новый?

1 Ответ

0 голосов
/ 20 октября 2019

Прочитайте блог после сохранения (чтобы установить Id).

var blog = new Blog(){ Name = "MyBlog" };
context.Blogs.Add(blog);
context.SaveChanges();

blog = db.Blogs
   .OrderBy(b => b.BlogId)
   .First();

var post = new Post() { Name = "MyFirstPost", Blog = blog };
context.Posts.Add(post);
context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...