How to associate static entity instances in a Session without database retrieval
- by Michael Hedgpeth
I have a simple Result class that used to be an Enum but has evolved into being its own class with its own table.
public class Result {
    public static readonly Result Passed 
           = new Result(StatusType.Passed) { Id = [Predefined] };
    public static readonly Result NotRun 
           = new Result(StatusType.NotRun) { Id = [Predefined] };
    public static readonly Result Running
            = new Result(StatusType.Running) { Id = [Predefined] };
}
Each of these predefined values has a row in the database at their predefined Guid Id.  
There is then a failed result that has an instance per failure:
public class FailedResult : Result { 
  public FailedResult(string description) : base(StatusType.Failed) { . . . } 
}
I then have an entity that has a Result:
public class Task {
  public Result Result { get; set; }
}
When I save a Task, if the Result is a predefined one, I want NHibernate to know that it doesn't need to save that to the database, nor does it need to fetch it from the database; I just want it to save by Id.
The way I get around this is when I am setting up the session, I call a method to load the static entities:
    protected override void OnSessionOpened(ISession session)
    {
        LockStaticResults(session, Result.Passed, Result.NotRun, Result.Running);
    }
    private static void LockStaticResults(ISession session, params Result[] results)
    {
        foreach (var result in results)
        {
            session.Load(result, result.Id);
        }
    }
The problem with the session.Load method call is it appears to be fetching to the database (something I don't want to do).
How could I make this so it does not fetch the database, but trusts that my static (immutable) Result instances are both up to date and a part of the session?