Ядро EF получает дополнительные записи таблицы в виде одного столбца json - PullRequest
0 голосов
/ 21 октября 2019

У меня есть таблица с именем 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)? Чтобы я мог преобразовать комментарии для блога в строку? И преобразование должно быть выполнено на стороне сервера, а не запросом, где я позже преобразовываю объект комментариев в строку.

1 Ответ

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

Вы можете использовать Тип объекта без ключа для регистрации представления SQL в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...