Ho alcune query che uso sempre (come ottenere solo righe di un tipo specifico, o contare qualcosa ecc.). Mi piacerebbe organizzarli in qualche modo (meglio di quello che faccio attualmente).
Attualmente li ho tutti in un static class
chiamato Queries
che non mi piace molto perché è come un non-so-come-a-dire-questa-classe .
Esiste un modo preferito per organizzare query predefinite in Entity Framework estendendo alcuni tipi ecc.?
Come richiesto qui c'è un esempio che mostra come lo utilizzo:
Tutte le mie query:
public static class Queries
{
public static IEnumerable<Light> GetEnabledLights()
{
using(var context = new MyEntities())
{
return context.Lights.Where(l => l.Enabled);
}
}
}
Codice che utilizza alcune query:
public static class LightsLoader
{
public static void LoadLights()
{
var enabledLights = Queries.GetEnabledLights().ToList();
if (enabledLights.Count == 0)
{
throw new InvalidOperationException("There are no enabled lights.");
}
// ... more code
}
}
Falso interrogativo e test della logica aziendale:
[TestClass]
public class LightsLoaderTests
{
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void TestNoEnableLights()
{
using(ShimContext.Create())
{
ShimQueries.GetEnabledLights = () => Enumerable.Empty<Light>();
LightsLoader.LoadLights();
}
}
}
Ma torniamo alla domanda: pensavo che Entity Framework potesse offrire un modo migliore per organizzare le query e metterle tutte in una God-Class; -)