This question is locked. New answers and comments are not allowed.
Hello
I need for two things:
1. Load a full list of some class values
2. Use mnemonics constants of some (or all) class values.
For example, I want to check something like:
if
(mainContractor.ApprovalStatus == ContractorApprovalStatus.NotApproved)
throw
new
Exception(....
I code the constants like this:
public
static
ContractorApprovalStatus NotApproved{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 0); }
}
public
static
ContractorApprovalStatus Approved{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 1); }
}
public
static
ContractorApprovalStatus RMCApproved{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 2); }
}
public
static
ContractorApprovalStatus ApprovalNotRequired{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 3); }
}
public
static
ContractorApprovalStatus ApprovalRefused{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 4); }
}
public
static
ContractorApprovalStatus ApprovalInProgress{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 5); }
}
public
static
ContractorApprovalStatus InvitationIssued{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 6); }
}
public
static
ContractorApprovalStatus BlockSpecificApproved{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 7); }
}
public
static
ContractorApprovalStatus ApplicationPackSent{
get
{
return
PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == 8); }
}
Well, numeric constants is a bad practice, but I generate the code automatically with a query:
SELECT
'public static ContractorApprovalStatus '
+
replace
(StatusName,
' '
,
''
) +
'{ get { return PMSDataSession.Context.ContractorApprovalStatus.FirstOrDefault(s => s.ID == '
+ rtrim(
CAST
(ContractorApprovalStatus_id
AS
CHAR
)) +
');}}'
FROM
ContractorApprovalStatus
ORDER
BY
ContractorApprovalStatus_id
It looks fine to me, but I don't like so an SQL query is running every time when I use a 'constant' ContractorApprovalStatus.NotApproved.
The table is absolutely static. probably I cal load all the table in a cache? (it is a shame I never used it)
What would be the best practice from the optimization POW?