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.82k stars 3.2k forks source link

Data denormalization in Ef Core and Azure Cosmos Db #33727

Open xari-jjcolumb opened 6 months ago

xari-jjcolumb commented 6 months 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?

ajcvickers commented 5 months ago

Note for team: this is a case where it would be useful to be able to map the same CLR type as both an owned and a non-owned type. Complex types should not have this problem, which reduces the priority here somewhat.

xari-jjcolumb commented 4 months ago

Any update on this?

ajcvickers commented 4 months ago

This issue is in the Backlog milestone. This means that it is not planned for the next release (EF Core 9.0). We will re-assess the backlog following the this release and consider this item at that time. However, keep in mind that there are many other high priority features with which it will be competing for resources. Make sure to vote (👍) for this issue if it is important to you.