【发布时间】:2009-07-07 16:00:36
【问题描述】:
如果我在代码中使用 int 类型的 BookID,它对应于数据库表中的 int 主键字段(我正在使用 C# 和 SQL Server)......这是最佳实践吗?当我在代码中传递 ID 时,使用可为空的 int 并检查 null 以查看 BookID 是否存在:
if (BookID != null) {
或者,分配一个与数据库中的实际值不对应的整数值(例如0或-1)是否更好:
if (BookID > 0) {
编辑: 为了进一步说明,假设我只想返回书的 ID,而不是整个书对象。在数据库中,主键是不可为空的,但是如果我要对不存在的“我的书名”的 BookID 执行查询,那么我将得不到任何结果。这应该反映为 null 吗?
例子:
BookID = GetBookID("my book title");
【问题讨论】:
-
只获得图书 ID 后的目标是什么?
-
我会以与在我的答案中获取书籍相同的方式实现 GetBookId() - TryGetBookId() 如果不查找书籍是有效的(可能是因为书名来自用户输入并且可能是错误)或 GetBookId() 如果总是期望该方法返回有效的书本 ID,则抛出异常。如果您真的不喜欢 TryGet 模式,下一个最佳解决方案是返回 null,但仍然比返回 -1 或任何其他幻数好得多。
标签: c# primary-key nullable