我有一个简单的Result类,它曾经是一个Enum,但已经发展成为拥有自己的表的自己的类。
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] };
}
这些预定义值中的每一个在数据库中都有一行预定义的Guid Id。
然后有一个失败的结果,每个失败都有一个实例:
public class FailedResult : Result {
public FailedResult(string description) : base(StatusType.Failed) { . . . }
}
然后我有一个具有结果的实体:
public class Task {
public Result Result { get; set; }
}
当我保存任务时,如果结果是预定义的,我希望NHibernate知道它不需要将它保存到数据库,也不需要从数据库中获取它;我只想把它保存为Id。
我解决这个问题的方法是当我设置会话时,我调用一个方法来加载静态实体:
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);
}
}
session.Load方法调用的问题似乎是提取到数据库(我不想做的事情)。
我怎么能这样做才能获取数据库,但是相信我的静态(不可变)Result实例都是最新的并且是会话的一部分?
答案 0 :(得分:1)
来自uNhAddIns的WellKnownInstanceType
可能是您正在寻找的内容:http://code.google.com/p/unhaddins/source/browse/trunk/uNhAddIns/uNhAddIns/UserTypes/WellKnownInstanceType.cs