Если у одного пользователя может быть много постов, а у поста может быть один пользователь, ваши сущности должны быть подготовлены для этого.
public class User
{
...
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
...
public virtual User { get; set;}
public virtual ICollection<Tag> { get; set; }
}
public class Tag
{
...
public virtual ICollection<Post> Posts { get; set; }
}
Если вы правильно определили свои сущности, вам следует составить правильное сопоставление с соглашениями по умолчанию. Если вы все еще хотите отобразить его с помощью API, вы должны использовать:
modelBuilder.Entity<User>().HasMany(u => u.Posts).WithRequired(p => p.User);
Это означает, что у одного пользователя может быть много сообщений, а в сообщении должен быть один пользователь. Это отображение 1-N. Для тегов и записей вам необходимо сопоставление M-N:
modelBuilder.Entity<Tag>().HasMany(t => t.Posts).WithMany(p => p.Tags);
Это означает, что в одном теге может быть много сообщений, а в сообщении может быть много тегов.
Вы будете сопоставлять другие отношения таким же образом.