我正在开发一个电子商务网站。
在数据库方面,我只有两个状态表。一个名为StatusGroup的表(例如,产品状态,订单状态等),另一个名为GlobalStatus。这是一对多的关系。它根据不同的statusGroup记录所有状态。
现在我的问题是,在C#方面,我该如何处理状态?
例如,当我创建新产品时,会有一个状态字段。现在,我正在对statusId进行硬编码(从数据库中获取GlobalStatus表并分配给产品)。
例如,productToCreate.StatusId = 111;它有效,但看起来很愚蠢。
当用户更改StatusGroup表中的值时,请确保我的c#代码无法正常工作,因为它是硬编码的。
我正在考虑使用枚举方法。生成枚举列表并从数据库中获取数据。但在我的第二个想法中,我想这不会起作用,因为枚举是为了设计时间,如果有人再次更改数据库中的值,它将无法工作......
我让我困惑,我想知道是否有任何建议?我想要的只是可以将statusId分配给我的对象,即使有人更改了数据库中的值,它仍然可以获得正确的statusId。 (对于c#,由statusName输入但不是statusId)
提前谢谢。
答案 0 :(得分:0)
根本不要将 StatusID 字段暴露给您的应用程序。
将索引(唯一)字段StatusDescription添加到Status表,并始终在StatusID上加入此表,以向应用程序和用户显示相应的StatusDescription。也许定义一个包含此连接的便捷视图ItemView。
必须选择状态值时,向用户显示StatusDescription字段。
更新项目的状态时:
update ItemTable
set StatusID = (
select StatusID from Status where StatusDescription = @StatusDescription
)
where ...
如果满足各种条件,您甚至可能会发现此SQL工作正常:
update ItemView
set StatusDescription = @StatusDescription.
where ...