Попробуйте изменить инициализацию объекта, чтобы сначала прикрепить объект публикации, а затем создать связь.
var category = wpe.Categories.First(c => c.id == catid);
var city = wpe.Cities.First(c => c.id == cid);
var user = wpe.Users.First(newU => newU.Id == u.Id);
Post p = new Post
{
title = txtTitle.Text,
description = txtDescription.Text,
initialprice = 0,
finalprice = 10,
postdate = DateTime.Now,
closedate = DateTime.Now.AddDays(Convert.ToInt32(cmbDays.SelectedValue)),
currentprice = 1
};
wpe.AddToPosts(p);
p.City = city;
p.Category = category;
p.User = user;
wpe.SaveChanges();
Если вы используете постоянные классы, они должны знать друг о друге, прежде чем могут быть созданы отношения. Это означает, что вам нужно либо отсоединить дочерние элементы перед созданием объекта, а затем сначала присоединить их всех дочерних элементов, либо, как указано выше, сначала прикрепить новую запись. Не уверен, что делает ваш репозиторий addtoposts, но это должно сработать, если вы не выполняете изменения сохранения до того, как объект станет действительным.
РЕДАКТИРОВАТЬ: Извинения. Я не заметил добавление объекта пользователя. Вам нужно будет либо перезагрузить пользователя с текущим контекстом, либо ОТКЛЮЧИТЬ пользователя от его предыдущего контекста и ПОДКЛЮЧИТЬ его к текущему.