在我们的数据库中,我们有"静态数据"其中id是手动分配的,并且在项目的整个生命周期中它们是相同的。在不同的地方,我们检查对象是否与这些静态数据具有相同的ID,例如:
public static void UpdateSlotCapacity(MagazineSlot slot)
{
using (var session = SessionManager.OpenSession())
{
session.Lock(slot, LockMode.Upgrade);
if (slot.Card.CardClass.ClassId == 9 || slot.Card.CardClass.ClassId == 2 ||
slot.Card.CardClass.ClassId == 3 ||
slot.Card.CardClass.ClassId == 5 || slot.Card.CardClass.ClassId == 7)
{
Dialogs.ShowInfo("Capacity update is not allowed for " + slot.Card.CardClass.ClassName + " cards");
return;
}
}
}
虽然,使用代码中的id永远不会改变数据真的很糟糕,我想将其更改为更易读和可维护的结构。我正在考虑使用enum
,但我不确定如何使用流利的nhibernate初始化枚举。关于如何实现这一目标的任何想法/提示?
答案 0 :(得分:2)
我同意你的看法enum
是更好的选择
以下是如何实现此目的的示例:
1.创建枚举:
public enum CardClassId {
ClassA = 1,
ClassB = 2,
ClassC = 3,
...
}
2.将 ClassId 属性的类型从 int 更改为 CardClassId :
public virtual CardClassId ClassId { get; set; }
3.更改您的地图(如果它不是这样的话):
Id(x => x.ClassId).GeneratedBy.Assigned();
4.更改您的代码,所以它看起来像这样:
public static void UpdateSlotCapacity(MagazineSlot slot)
{
using (var session = SessionManager.OpenSession())
{
session.Lock(slot, LockMode.Upgrade);
if (slot.Card.CardClass.ClassId == CardClassId.ClassI ||
slot.Card.CardClass.ClassId == CardClassId.ClassB ||
slot.Card.CardClass.ClassId == CardClassId.ClassC ||
slot.Card.CardClass.ClassId == CardClassId.ClassE ||
slot.Card.CardClass.ClassId == CardClassId.ClassG)
{
Dialogs.ShowInfo("Capacity update is not allowed for " + slot.Card.CardClass.ClassName + " cards");
return;
}
}
}
您不必担心映射太多,因为NHibernate会自动从数据库整数转换为您的枚举。请记住,您必须将 GeneratedBy 设置为已分配,并且您的枚举项应将其值设置为与数据库中相同的值。