0

J'ai une classe qui est utilisée pour les méthodes d'extension LINQ. Je reçois un System.TypeInitializationException de la classe suivante:Ma classe LINQ précompilée Entity Framework lève une exception System.TypeInitializationException

public static class CarLib { 
    private readonly static IOPTS_EFEntities Context = new myEFEntities(); 

    public IQueryable<Transmission> GetTransmissions(this Car car, IEFEntities context = null) { 
     if (context == null) 
     context = Context; 

     return SelectCarWithTransmissionCompiled(car, context); 
    } 

    public IQueryable<Tire> GetTires(this Car car, IEFEntities context=null) { 
     if (context == null) 
     context = Context; 

     return SelectTiresCompiled(car, context); 
    } 

    private static readonly Func<Car, IEFEntities, IQueryable<Transmission>> SelectTransmissionsCompiled = SelectTransmissions.Compile(); 
    private static readonly Func<Car, IEFEntities, IQueryable<Tire>> SelectTiresCompiled = SelectTires.Compile(); 

    private static readonly Expression<Func<Car, IEFEntities, IQueryable<Transmission>>> SelectTransmissions= (myCar,context) => 
        from trans in context.Transmissions 
        where trans.CarId == myCar.Id 
        select trans; 

    private static readonly Expression<Func<Car, IEFEntities, IQueryable<Tire>>> SelectTires = (car,context) => 
        from tire in context.Tires 
        where car.Id == tire.CarId 
        && accused.Ssn.IsValidSsn() 
        && !tire.Brand.IsNullEmptyOrWhitespace() 
        && !tire.Diameter.IsNullEmptyOrWhitespace() 
        && !tire.Weight.IsNullEmptyOrWhitespace() 
        && tire.Price.IsPopulated() 
        select tire; 
    } 

Répondre

0

Essayez le code que vous avez dans les champs statiques (initialisation du contexte et la compilation des requêtes) dans un test unitaire (ou juste une méthode) et voir l'exception réelle et sa trace de pile.

De plus, avoir le DataContext dans un champ statique est une bombe à retardement. Créez-en un nouveau dans chaque méthode ou partagez-le en le stockant dans un endroit contrôlé (comme HttpContext.Item, Call.Context, etc.)

Questions connexes