dotnet / efcore

EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.
https://docs.microsoft.com/ef/
MIT License
13.41k stars 3.11k forks source link

Data denormalization in Ef Core and Azure Cosmos Db #33727

Open xari-jjcolumb opened 2 weeks ago

xari-jjcolumb commented 2 weeks ago

How do I denormalize data in Ef Core with Azure cosmos db provider?

As shown in this documentation: https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/model-partition-example#v2-introducing-denormalization-to-optimize-read-queries

I need to denormalize an entity which also lives in another container:

   public class Post
   {
       public int Id { get; set; }
       public string Title { get; set; } = null!;
       public List<Hashtag> Hashtags { get; set; } = new List<Hashtag>();
   }

   public class Comment
   {
       public int Id { get; set; }
       public int PostId { get; set; }
       public string Text { get; set; } = null!;
       public List<Hashtag> Hashtags { get; set; } = new List<Hashtag>();
   }
   public class Hashtag
   {
       public int Id { get; set; }
       public string Title { get; set; } = null!;
       public int Puntuation { get; set; }
   }

So for faster queries I need to embed the Hashtag in the Comment and in the Post (this is just an example, not a real use case), but the hashtag lives in it's own container.

I know this it's not possible in Ef Core due to I'll se an error like this: 'The type 'Hashtag' cannot be marked as owned because a non-owned entity type with the same name already exists.'

Any solution?