3 votes

Entity framework 4.0 et 5.0 Code First hint IQueryable query avec NOLOCK

J'utilise EF 5.0 Code First. Nous ne pouvons pas mettre en œuvre nolock sur chaque requête de lecture. Veuillez trouver le code ci-dessous.

Mon modèle :

public class UserType
{
    public UserType()
    {
        CreationDate = DateTime.Now;
        UpdatedDate = DateTime.Now;
        DeletedFlag = false;
    }
    public int UserTypeId { get; set; }
    public string UserTypeName { get; set; }

    public int CreatedBy { get; set; }
    public int UpdatedBy { get; set; }
    public DateTime CreationDate { get; set; }
    public DateTime UpdatedDate { get; set; }
    public bool DeletedFlag { get; set; }
}

RepositoryBase :( nous utilisons le modèle de conception de référentiel)

 public IQueryable<T> Query<T>() where T : class
    {
            return DataContext.Set<T>();
    }

Service :

//TODO: place NOLOCK
repBase.Query<UserType>().Where(ja => ja.DeletedFlag == false).OrderByDescending(ja => ja.UpdatedDate).ToList();

repBase est l'instance du contexte de la base de données à appeler au-dessus de Query().

Maintenant nous voulons exécuter la requête ci-dessus avec (NOLOCK).

V EF 5.0 Code First, C#.Net 4.0, MVC Web API, Repository Design Pattern

Merci d'avance.

4voto

Ladislav Mrnka Points 218632

Il n'est pas pris en charge. EF n'émet jamais NOLOCK dans les requêtes et il n'y a aucun moyen de le faire sauf en exécutant directement le SQL à travers Database.SqlQuery o DbSet.SqlQuery . Si vous voulez avoir NOLOCK généré par EF, vous pouvez télécharger le code source de EF et modifier son moteur de génération SQL pour ajouter le hint. De toute façon, vous devriez réfléchir à deux fois avant d'utiliser NOLOCK globalement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X