web-dev-qa-db-fra.com

Les types d'entités sans clé .Net core 3.x évitent la création de table

J'ai besoin d'exécuter une requête SQL complexe dans le noyau du framework d'entités 3.1.1, en recherchant, j'ai découvert que les types d'entités sans clé sont la voie à suivre dans l'approche du code. Je vois beaucoup de documents pour dbquery mais cela est marqué comme obsolète dans .net core 3.x

types d'entités sans clé

Selon la documentation Microsoft, il est indiqué que dbquery est obsolète, alors utilisez plutôt l'approche dbset, mais avec dbset, il essaie de créer une nouvelle table dans la base de données. comment désactiver la génération de table dans les types d'entités sans clé lors de l'application des migrations?

Exemple de code

public class ApplicationContext : DbContext
{
 public DbSet<CustomQuery> CustomQuery { get; set; }
 protected override void OnModelCreating(ModelBuilder modelBuilder)
 {
    modelBuilder.Ignore<CustomQuery>();
    modelBuilder.Entity<CustomQuery>().HasNoKey();
 }
}

avec .net core 2.2

var entity = _context.Query<CustomQuery>().FromSqlRaw(Regex.Unescape(selectQuery)).AsNoTracking().FirstOrDefault();

avec .net core 3.1

var newEntity = _context.CustomQuery.FromSqlRaw(Regex.Unescape(selectQuery)).AsNoTracking().FirstOrDefault();

si j'essaie d'appliquer des migrations, une nouvelle table au nom de la requête personnalisée est en cours de création, mais je n'ai pas besoin que cela se produise. car il s'agit simplement d'un modèle utilisé pour contenir les valeurs de la requête de jointure et je ne vais pas insérer, mettre à jour ou supprimer les valeurs de cette table. comment y parvenir?

ou y a-t-il une meilleure approche pour cette situation.

5
Richard Vinoth

Il s'agit d'un défaut connu dans EF Core 3, signalé ici Mise à niveau 3.0 - L'entité avec HasNoKey () (anciennement un type de requête) tente de créer des tables lors de l'ajout de la migration # 18116 .

Fermé en tant que "duplicate" de méthodes To vs From: proposition de rationaliser ToTable, ToQuery, ToView, FromSql et autres méthodes connexes # 1727 et Possibilité d'exclure/ignorer/ignorer des parties du modèle à partir des migrations afin qu'aucune table ne soit créée (pour les contextes délimités qui se chevauchent) # 2725 , tous deux prévus pour la version 5.0, ce qui signifie qu'il sera éventuellement traité dans cette version.

La solution de contournement actuelle est mentionnée dans le commentaires par l'un des membres de l'équipe EF Core:

Pour l'instant, vous pouvez simplement utiliser quelque chose comme .ToView("You forgot to use FromSql with ModQueueEntry")

ou plus généralement, en utilisant .ToView(null), par ex.

modelBuilder.Entity<CustomQuery>().HasNoKey().ToView(null);
5
Ivan Stoev