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