You can use native SQL to materialize entities, using projections, it's not necessarily restricted to SP, although it will require extra work.
What you need is a RetrievalQuery object which will form the query and the necessary projectors as described in the manual, where it's explained how to project entities from a proc result.
If you look at the RetrievalProcedures.cs file generated for retrieval procs, you'll notice code like:
/// <summary>Creates an IRetrievalQuery object for a call to the procedure 'CustOrderHist'.
///
/// </summary>
/// <param name="customerId">Input parameter of stored procedure</param>
/// <returns>IRetrievalQuery object which is ready to use for datafetching</returns>
public static IRetrievalQuery GetCustOrderHistCallAsQuery( System.String customerId)
{
RetrievalQuery toReturn = new RetrievalQuery( new SqlCommand("[Northwind].[dbo].[CustOrderHist]" ) );
toReturn.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.NChar, 5, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current, customerId));
toReturn.Command.CommandType = CommandType.StoredProcedure;
return toReturn;
}
This is generated code to obtain a RetrievalQuery object to directly execute it to obtain a resultset to project onto entities.
You can build manually a RetrievalQuery object using hardcoded SQL, as you simply feed it with a Command which has its commandtype set to text and which receives the required parameters from you.
After you've created the RetrievalQuery, you can follow the same path as you would with a proc. So the extra work is in building the RetrievalQuery object.