2009-11-24 9 views
1

J'ai le contrôle de recherche avec lequel j'essaie d'implémenter la recherche lorsque l'utilisateur saisit quelque chose. J'utilise Linq to SQL pour déclencher des requêtes sur la base de données. Bien que cela fonctionne normalement, lorsque l'utilisateur tape les requêtes très rapidement, une exception SqlException aléatoire est levée. Ce sont les deux différents messages d'erreur que j'ai trébuché récemment:Plusieurs requêtes utilisant le même datacontext lancent SqlException

Une erreur grave s'est produite sur la commande en cours. Les résultats, le cas échéant, doivent être ignorés.

Tentative d'appel infructueuse Lecture lorsque le lecteur est fermé.

Edit: code inclus

classe DataContextFactory:

public DataContextFactory(IConnectionStringFactory connectionStringFactory) 
{ 
    this.dataContext = new RegionDataContext(connectionStringFactory.ConnectionString); 
} 

public DataContext Context 
{ 
    get { return this.dataContext; } 
} 

public void SaveAll() 
{ 
    this.dataContext.SubmitChanges(); 
} 

Enregistrement IDataContextFactory avec Unity

// Get connection string from Application.Current settings 
ConnectionInfo connectionInfo = Application.Current.Properties["ConnectionInfo"] as ConnectionInfo; 
// Register ConnectionStringFactory with Unity container as a Singleton 
this.container.RegisterType<IConnectionStringFactory, ConnectionStringFactory>(new ContainerControlledLifetimeManager(), 
    new InjectionConstructor(connectionInfo.ConnectionString)); 
// Register DataContextFactory with Unity container 
this.container.RegisterType<IDataContextFactory, DataContextFactory>(); 

Chaîne de connexion:

Data Source=.\SQLEXPRESS2008;User Instance=true;Integrated Security=true;AttachDbFilename=C:\client.mdf;MultipleActiveResultSets=true; 

Utilisation datacontext d'une classe repository:

// IDataContextFactory dependency is injected by Unity 
public CompanyRepository(IDataContextFactory dataContextFactory) 
{ 
    this.dataContextFactory = dataContextFactory; 
} 

// return List<T> of companies 
var results = this.dataContextFactory.Context.GetTable<CompanyEntity>() 
     .Join(this.dataContextFactory.Context.GetTable<RegionEntity>(), 
      c => c.regioncode, 
      r => r.regioncode, 
      (c, r) => new { c = c, r = r }) 
     .Where(t => t.c.summary_region != null) 
     .Select(t => new { Id = t.c.compcode, Company = t.c.compname, Region = t.r.regionname }).ToList(); 

Quel est le travail autour?

+0

Pouvez-vous donner un exemple de code de la façon dont vous utilisez le DataContext? – Konamiman

+0

@Konamiman Exemple de code ajouté. Pourriez-vous vérifier celui-ci maintenant? – Raj

Répondre