【发布时间】:2011-04-19 09:03:36
【问题描述】:
例如我有以下领域模型:
class Order {
public virtual int Id {get; protected set;}
public virtual BaseStatus Status {get; set;}
}
abstract class BaseStatus {
public virtual int Id {get; protected set;}
public abstract string Name {get;}
}
class Approved : BaseStatus {
public override string Name
{
get { return "Approved"; }
}
}
所以现在我不想拥有两张桌子,Orders 和 Statuses。 Orders 表将有 StatusId 列。
问题是关于更改订单状态的API。如果我执行以下操作:
order.Status = new Approved();
这将导致在状态表中创建新行。 目前我已经创建了以下助手:
class StatusesFactory {
ISession session;
public StatusesFactory(ISession session){
this.session = session;
}
public GetStatus<T> where T : BaseStatus, new() {
T status = session.QueryOver<T>.SingleOrDefault();
if(status == null){
status = new T();
session.SaveOrUpdate(status);
}
return status;
}
}
当我想设置状态时,我正在使用这样的代码:
order.Status = statusesFactory.GetStatus<Approved>();
它似乎工作正常,但没有理由变得复杂。我正在使用 NHibernate,但我认为同样的问题可能适用于任何 ORM。这样做的原因是很容易在空数据库上部署,以便在第一次请求时填充它。
- 如何处理字典表?
- 我的方法是否有我看不到的明显缺点?
-
我在这里看到的一个问题是,当我需要获取所有可能的状态时,我无法使用如下代码:
session.QueryOver().List();
因为尚未创建所有状态。 那你怎么看?
【问题讨论】:
-
一个枚举不能满足订单状态吗?
标签: c# .net nhibernate entity-framework orm