В настоящее время я пытаюсь создать Web Api с EF Core и сталкиваюсь с некоторыми проблемами при объединении таблиц, которые я собрал.Я работаю со следующей диаграммой базы данных:
И данные, которые я сейчас получаю из моего API, выглядят так:
[
{
"postId":1,
"postDate":"2018-10-21T21:56:43.9838536",
"content":"First entry in posts!",
"user":{
"userId":1,
"creationDate":"2018-10-21T21:56:36.3539549",
"name":"Hansel"
},
"comments":[
{
"commentId":1,
"postDate":"0001-01-01T00:00:00",
"content":"Nice!",
"user":null
},
{
"commentId":2,
"postDate":"0001-01-01T00:00:00",
"content":"Cool, here's another comment",
"user":null
},
{
"commentId":3,
"postDate":"0001-01-01T00:00:00",
"content":"and the last one for the night",
"user":null
}
]
},
{
"postId":2,
"postDate":"2018-10-22T21:56:44.0650102",
"content":"Its good to see that its working!",
"user":{
"userId":2,
"creationDate":"2018-10-16T21:56:36.4585213",
"name":"Chris"
},
"comments":[
]
}
]
Как вы можете видеть, это почти все работает, моя проблема здесь - нулевые значения в комментариях, я хочу иметь возможность также выводить пользователей.Но по какой-то причине я не могу.
мой текущий запрос выглядит следующим образом (я использую DTO для очистки сгенерированного JSON):
var result = from post in context.Posts
join user in context.Users
on post.User.UserId equals user.UserId
join comment in context.Comments
on post.PostId equals comment.Post.PostId into comments
select new PostDTO
{
Content = post.Content,
PostDate = post.PostDate,
User = UserDTO.UserToDTO(user),
Comments = CommentDTO.CommentToDTO(comments.ToList()),
PostId = post.PostId
};
Если я работал с SQL, я 'Я бы присоединился к пользователям в «комментарии», но я не могу, поэтому я попробовал аналогичное решение, которое, я думал, будет работать.
var result = from post in context.Posts
join user in context.Users on post.User.UserId equals user.UserId
join comment in
(from u in context.Users
join c in context.Comments
on u.UserId equals c.User.UserId select c)
on post.PostId equals comment.Post.PostId into comments
select new PostDTO
{
Content = post.Content,
PostDate = post.PostDate,
User = UserDTO.UserToDTO(user),
Comments = CommentDTO.CommentToDTO(comments.ToList()),
PostId = post.PostId
};
Однако, хотя этот запрос выполняет, результатытак же, как первый запрос, который я написал, проблема в том, что пользователь не присоединен к комментарию
TLDR;Я могу присоединиться к пользователю, чтобы оставлять сообщения и комментировать, но я не могу связать пользователя с комментарием
Я надеюсь, что вы сможете мне помочь, заранее спасибо:)
Редактировать: Вот мои модели
public class Comment
{
public int CommentId { get; set; }
public DateTime PostDate { get; set; }
public string Content { get; set; }
public User User { get; set; }
public Post Post { get; set; }
}
public class User
{
public int UserId { get; set; }
public DateTime CreationDate { get; set; }
public string Name{ get; set; }
public ICollection<Post> Posts { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Post
{
public int PostId { get; set; }
public DateTime PostDate { get; set; }
public string Content { get; set; }
public User User { get; set; }
public ICollection<Comment> Comments { get; set; }
}