EF 6.1.3 (ASP.NET 5 RC1 app) ασύγχρονη Αποθετήρια αντιφατικά αποτελέσματα

ψήφοι
0

Έχω ένα ASP.NET Πυρήνα 1.0 RC Εφαρμογή βασίζεται χρησιμοποιώντας ένα ασύγχρονο EF6 γενόσημα αποθετήριο βάση η οποία έχει ένα GetAsyncμέθοδο:

public virtual async Task<T> GetAsync(Expression<Func<T, bool>> predicate, bool includeSoftDeleted = false) 
    {
        try
        {
            return 
                await
                    _context.Set<T>().Where(e => includeSoftDeleted || !e.IsDeleted).FirstOrDefaultAsync(predicate);
        }
        catch (Exception ex)
        {
            _logger.LogError($Unable to get the {typeof(T).Name}. See the exception for more details.,predicate,ex);
            return null;
        }
    }

Όλα τα αποθετήρια μου χρήση αυτής της τάξης ως τάξης βάση και εγχέονται με Autofac όπως InstancePerLifetime()στον τομέα των υπηρεσιών μου.

Γι 'αυτό και έχουν μια μέθοδο στην υπηρεσία μου που καλεί αυτό GetAsync:

 public async Task<int?> GetRoleAccessPermissionLevelAsync(UserRole userRole, Access access)
    {
        // TODO: Implement IEquatable for Access to replace with a == access
        var accessFromDb = await _accessRepository.GetAsync(a => a.Module == access.Module && a.Controller == access.Controller && a.Action == access.Action);

        if(accessFromDb == null) return null;

        var roleAccess = await _roleAccessRepository.GetAsync(r =>
           r.RoleId == userRole.RoleId && r.AccessId == accessFromDb.Id);

        return (int?)roleAccess?.AccessLevel;
    }

Εδώ, η accessFromDbμερικές φορές null, μερικές φορές όχι, με τις ίδιες τιμές που δίνονται σε αυτό: access.Module = Main, ελεγκτή και δράσης null.

Πώς είναι δυνατόν, χωρίς να αλλάξει η contextή η αποθήκη του Set<T>(), ότι αυτό είναι μερικές φορές nullκαι μερικές φορές επιστρέφει το αντικείμενο;

Υποθέτω ότι αυτό έχει να κάνει με μια «κλειδαριά» που πρέπει να βάλετε κάπου για την ασύγχρονη;

Δημοσιεύθηκε 05/07/2016 στις 13:18
πηγή χρήστη
Σε άλλες γλώσσες...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more