C# 需要帮助构建敏捷的nhibernate实体吗

C# 需要帮助构建敏捷的nhibernate实体吗,c#,nhibernate,asp.net-mvc-3,c#-4.0,fluent-nhibernate,C#,Nhibernate,Asp.net Mvc 3,C# 4.0,Fluent Nhibernate,我正在创建一个管理文档的web应用程序。这些文件分为几个阶段。用户将能够从当前阶段退回到上一阶段拒绝这些文档 因此,流程将类似于此文档第一阶段批准>获取下一阶段并将文档阶段设置为下一阶段>文档第一阶段拒绝>获取上一阶段并将文档阶段设置为上一阶段 现在我需要的帮助是如何来回管理阶段,以及设置实体的最佳方式是什么 示例实体 public class Document { public virtual int Id { get; set; } public virtual string

我正在创建一个管理文档的web应用程序。这些文件分为几个阶段。用户将能够从当前阶段退回到上一阶段拒绝这些文档

因此,流程将类似于此文档第一阶段批准>获取下一阶段并将文档阶段设置为下一阶段>文档第一阶段拒绝>获取上一阶段并将文档阶段设置为上一阶段

现在我需要的帮助是如何来回管理阶段,以及设置实体的最佳方式是什么

示例实体

public class Document
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Stage Stage { get; set; }
}

public class Stage
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

使用枚举

用枚举替换类阶段

public enum Stage
{
   Rejected, None, Approved, Etc 
}
在NHibernate映射simplay中,将阶段枚举添加到映射中

在数据库中,您只需将Stage列创建为int32,Nhibernate就会知道如何自动持久化和加载枚举

使用枚举的优点是,您始终可以将枚举强制转换为int,然后递减或递增以获得上一个或下一个阶段(假设您只是在0..N中添加它们)

否则,您可以使用linq查询来获取上一步或下一步

编辑

到目前为止,在您的需求中,您还没有列出您需要的任何通用工作流的复杂性。下面是一个示例应用程序,它使用WWF和与您所需类似的文档审批系统


直到你真正需要WWF的复杂性。我建议您使用枚举,然后在需求发生变化时进行重构。这样,您就不会实现“以防万一”的功能。

使用枚举

用枚举替换类阶段

public enum Stage
{
   Rejected, None, Approved, Etc 
}
在NHibernate映射simplay中,将阶段枚举添加到映射中

在数据库中,您只需将Stage列创建为int32,Nhibernate就会知道如何自动持久化和加载枚举

使用枚举的优点是,您始终可以将枚举强制转换为int,然后递减或递增以获得上一个或下一个阶段(假设您只是在0..N中添加它们)

否则,您可以使用linq查询来获取上一步或下一步

编辑

到目前为止,在您的需求中,您还没有列出您需要的任何通用工作流的复杂性。下面是一个示例应用程序,它使用WWF和与您所需类似的文档审批系统


直到你真正需要WWF的复杂性。我建议您使用枚举,然后在需求发生变化时进行重构。这样,您就不会实现“以防万一”的功能了。

这听起来是个不错的选择。我只是想看看是否还有其他建议。使用WWF更新了我的答案,添加了第二个选项。我如何在不创建Int32列的情况下完成这项工作?我使用fluent nhibernate为那些可能需要它映射的人生成表(x=>x.Role);听起来是个不错的选择。我只是想看看是否还有其他建议。使用WWF更新了我的答案,添加了第二个选项。我如何在不创建Int32列的情况下完成这项工作?我使用fluent nhibernate为那些可能需要它映射的人生成表(x=>x.Role);