在软件开发中,经常需要处理数据库查询和数据映射。为了提高代码的可读性和维护性,希望避免硬编码,而是使用更高级的数据结构,如枚举(enum)。然而,在使用Microsoft的SQL ServerORM工具LINQto SQL时,发现它并没有内置的设计支持来从查找表中生成枚举。这就意味着需要手动定义枚举,这虽然比硬编码要好,但仍然不是最理想的解决方案。
首先,需要在数据库层定义一个枚举。假设有一个名为'PeriodStatusId'的字段,希望将其填充为枚举值。在C#中,可以这样定义枚举:
public enum PeriodStatusEnum
{
ClosedByUser = 1,
ClosedBySystem = 2,
ReOpenedByUser = 3
}
在上面的代码中,整数对应于查找表中的自增整数ID,而文本则对应于描述字段。虽然预定义枚举并不是最理想的,但至少比硬编码要好得多。
枚举创建后,将在数据上下文中引用它,而不是数据库的原生类型。需要将查找表和引用表的字段类型更改为枚举,前缀为'global::',例如:
global::yourNamespace(s).PeriodStatusEnum
这样,就可以使用枚举而不是主动查找值了。例如:
TidsRegPeriode period = new TidsRegPeriode();
// 通过引用枚举来填充字段
period.periodeStatusId = timeRegistrering.Domain.PeriodStatusEnum.ReOpenedByUser;
// 其他字段填充...
dbContext.TidsRegPeriodes.InsertOnSubmit(period);
dbContext.SubmitChanges();
如果能在设计器中指定枚举,那将会更好。但遗憾的是,LINQto SQL并不支持这一功能。因此,只能通过这种方式来实现,虽然它比硬编码要好得多。