Query extensions template
The Queries.cst template is an optional alternative to the Managers template. If you don't want to use the managers, use this template to generate common queries for each entity. You can use both templates, but they duplicate some functionality.
The template generates an extension class for Table<Entity>, so the queries are available on the DataContext:
SampleDataContext db = new SampleDataContext();
Task task = db.Task.GetByKey(1);
Here's an example of a generated extension class:
/// <summary>
/// The query extension class for Task.
/// </summary>
public static partial class TaskQueryExtension
{
/// <summary>
/// Gets an instance by the primary key.
/// </summary>
public static Task GetByKey(this Table<Task> entity, int taskID)
{
if (entity.Context.LoadOptions == null)
return Query.GetByKey.Invoke((SampleDataContext)entity.Context, taskID);
else
return entity.FirstOrDefault(t => t.TaskID == taskID);
}
/// <summary>
/// Gets a query by an index.
/// </summary>
public static IQueryable<Task> GetByStatusID(this Table<Task> entity, int statusID)
{
if (entity.Context.LoadOptions == null)
return Query.GetByStatusID.Invoke((SampleDataContext)entity.Context, statusID);
else
return entity.Where(t => t.StatusID == statusID);
}
#region Query
/// <summary>
/// A private class for lazy loading static compiled queries.
/// </summary>
private static partial class Query
{
internal static readonly Func<SampleDataContext, int, Task> GetByKey =
CompiledQuery.Compile(
(SampleDataContext db, int taskID) =>
db.Task.FirstOrDefault(t => t.TaskID == taskID));
internal static readonly Func<SampleDataContext, int, IQueryable<Task>> GetByStatusID =
CompiledQuery.Compile(
(SampleDataContext db, int statusID) =>
db.Task.Where(t => t.StatusID == statusID));
}
#endregion
}
To see how to combine the generated methods, see Query extensions in the feature tour.
Properties
| Category | Property | Description |
|---|---|---|
| 1. Database | SourceDatabase |
The database whose keys and indexes the queries are generated from. |
| 2. Mapping | DbmlFile |
The path of the dbml file to generate the query classes from. |
| 3. Query | QueryDirectory |
The folder for the generated query extension files. |
QueryNamespace |
The namespace of the generated query extension classes. | |
MethodPrefix |
The prefix of query method names. The default is By. |
|
UniqueMethodPrefix |
The prefix of query method names that return a single result. The default is GetBy. |
|
MethodKeySuffix |
The suffix of primary key query method names. The default is Key. |