我在我的表中使用 Guid.comb 作为我的主键。
我从未找到任何使用可为空的 guid 作为域类 ID 的示例;这是 NHibernate 的坏习惯吗?
原因:我将 POCO 列表绑定到组合框;如果没有可为空的 guid,我必须处理 Guid.Empty 的验证,而不是在 DataAnnotations 所需的验证中使用默认构建。
谢谢
我在我的表中使用 Guid.comb 作为我的主键。
我从未找到任何使用可为空的 guid 作为域类 ID 的示例;这是 NHibernate 的坏习惯吗?
原因:我将 POCO 列表绑定到组合框;如果没有可为空的 guid,我必须处理 Guid.Empty 的验证,而不是在 DataAnnotations 所需的验证中使用默认构建。
谢谢
主键的主要原因是它为特定记录定义了唯一标识符。如果您能够使您的主键可以为空,那么 NHibernate 将无法区分具有空 GUID 的新创建记录和具有空或可为空 GUID 的数据库中现有记录之间的区别。
所以是的,你看不到任何这样的例子,因为这将是一个非常糟糕的做法。
关于您将 POCO 绑定到组合框的示例,这也是一种不好的做法。遵循关注点分离原则,您不希望将您的 UI 逻辑与特定于域的逻辑(例如您与 NHibernate 一起使用以持久保存到数据库的 POCO/实体)混合。通常,您将创建一个 ViewModel 类来存储 UI 所需的任何数据。然后,您将拥有一个服务/业务层,该层将存储业务逻辑并处理将您的 ViewModel 类转换/映射到 POCO/实体/DTO。
因此,在您的示例中,如果应用程序遵循关注点分离原则,您甚至不会遇到您面临的问题,因为您不会公开您希望使用 NHibernate 创建/保存/更新的对象。以这种方式分离您的应用程序提供了许多其他好处,例如不直接将您的数据库架构绑定到您的 UI,允许您轻松修改 UI、服务层或数据库,而不会显着影响任何其他层等。