0

我在我的表中使用Guid.comb作爲我的主鍵。可空GUID(Guid?)作爲域類的ID(NHibernate)

我從來沒有發現任何使用可空的guid作爲域類ID的示例;這是NHibernate的一個不好的做法嗎?

原因: 我綁定了一個POCO列表組合框;沒有可空的guid,我必須處理Guid.Empty的驗證,而不是使用DataAnnotations Required Validation中的默認構建。

感謝您

+2

您可以使用如果你想要,可以爲空。 –

回答

0

的主要原因是主鍵是,它定義了一個特定的記錄的唯一標識符。如果你能夠使你的主鍵可以爲空,那麼NHibernate將無法區分具有空GUID的新創建記錄和數據庫中已有的記錄之間的空白或可空的GUID。

所以是的,你沒有看到任何這樣的例子,因爲這將是一個非常糟糕的做法。

關於將POCO綁定到組合框的示例,這也是一個不好的做法。在separation of concerns principle之後,您不希望將您的UI邏輯與領域特定的邏輯(例如您使用NHibernate的POCOs /實體)保存到數據庫中。通常,您將創建一個ViewModel類,該類可以存儲UI所需的任何數據。然後您將擁有一個服務/業務層,它將存儲業務邏輯並處理將ViewModel類轉換/映射到POCO /實體/ DTO。

因此,在您的示例中,如果應用程序遵循關注點分離原則,則您甚至不會遇到您面臨的問題,因爲您不會使用NHibernate公開要創建/保存/更新的對象。以這種方式分離您的應用程序提供了許多其他好處,如不能直接捆綁你的數據庫架構的UI,讓您輕鬆修改UI,服務層,或數據庫,而不極大影響任何其他層等