У меня есть таблица с именем Blog, которая определена в SQL:
create table Blog
(
SurrogateKey uniqueidentifier not null primary key,
Text nvarchar(max)
)
, и вторая таблица с именем Comments:
create table Comments
(
SurrogateKey uniqueidentifier not null primary key,
Comment nvarchar(max)
)
в EF У меня есть сущности Blog и Comment в C #например:
internal class Blog
{
public Guid SurrogateKey {get;set;}
public string Text {get;set;}
public ICollection<Comment> {get;set;}
// what I want as json or xml
// public string Comments {get;set;}
}
internal class Comment
{
public Guid SurrogateKey {get;set;}
public string Comment {get;set;}
}
и контекст, например:
internal class BlogContext : DBContext
{
....
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().HasKey(blog => blog.SurrogateKey);
modelBuilder.Entity<Blog>().ToTable("Blog");
modelBuilder.Entity<Comment>().HasKey(comment=> comment.SurrogateKey);
modelBuilder.Entity<Comment>().ToTable("Comment");
modelBuilder.Entity<Blog>().HasMany(item => item.Comments)
.WithOne().HasForeignKey(comment => comment.SurrogateKey);
}
}
EF создает затем соединение следующим образом:
select SurrogateKey, Text, Comment from Blog
join Comments on Blog.SurrogateKey = Comments.SurrogateKey
затем я получаю все результаты, дублированные наколичество комментариев. Для исполнения я хочу комментарии в виде строки. И должно быть возможно запросить комментарии. Так что я получу один результат с блогом и всеми комментариями. В SQL я бы написал:
select SurrogateKey, Text,
Comment = (select Comment
from comments where surrogateKey = blog.SurrogateKey
AND Comment like '%test%' FOR XML)
from Blog
Можно ли сделать то же самое с ядром Enity Framework (3)? Чтобы я мог преобразовать комментарии для блога в строку? И преобразование должно быть выполнено на стороне сервера, а не запросом, где я позже преобразовываю объект комментариев в строку.