2011-05-13 26 views
0

我有一個用於LINQ擴展方法的類。我從下面的類得到一個System.TypeInitializationException我的實體框架precomiled LINQ類拋出一個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; 
    } 

回答

0

試試你在靜態字段在單元測試代碼(上下文初始化和查詢編譯)(或只是一個方法),看看實際的異常和它的堆棧跟蹤。

另外,讓DataContext處於靜態域是一個定時炸彈。在每個方法中創建一個新的方法或共享它將其存儲在受控位置(如HttpContext.Item,Call.Context等)