gpt4 book ai didi

c# - POCO 对象中的非空约束

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:23 24 4
gpt4 key购买 nike

我目前正在编写一个财务应用程序,我们有一个非常标准的客户表。它由许多必填字段和一些可选字段组成,如 Cell/Fax 等。我将 NHibernate 用作 ORM,并且所有映射都是正确的。它已经有效。

我只是想知道,我如何在代码中“表达”一个字段不为空而不注释?我有记录此内容的 hbm.xml 文件,但像这样查看它们有点尴尬。

想到的另一件事是我不希望存储库在我的逻辑中抛出 NHibernate 异常,所以也许我应该在 Controller 中进行验证。不过,如何让 POCO 代码表示某些字段可以为空?

Class Diagram

如您所见,我希望手机和传真是可选的,而电话是必需的。它们都是复合映射,因此映射文件仅指定每个元素的单个元素必须为非空,但我讨厌一直执行 Person.Cellular != null 检查以避免出现 NullReferenceException。

最佳答案

根据您的 POCO 行为和编码风格,有几种方法可以做到这一点。首先,您可以使用可为 null 的类型来表示此字段可为 null,因此暗示其余字段不可为 null。或者,您可以引入一个 Phone 值类型作为您说明的 POCO 的 Phone 属性的类型,这意味着因为它不是原始类型,所以它“更重要”——这也使您能够在类中封装电话号码验证本身。

在我看来,要成为一个真正的 POCO 对象,它不必担心它所驻留的数据库表中的潜在可空性......它实际上应该具有验证和值类型来表达其作为独立实体的行为;因此在它到达 NHibernate 之前它已经处于有效状态。

关于c# - POCO 对象中的非空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/304745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com