在保存到数据库之前,检查类是新实例还是至少填充了一个属性

本文关键字:填充 属性 一个 保存 实例 检查 新实例 数据库 | 更新日期: 2023-09-27 18:34:11

我认为这很容易,但我想不出一个好方法。

用户提交网络表单。根据提交的信息,我构建了三个类,并从接收到的数据中分配了它们的属性:

UserInfo userInfo = new UserInfo();
UserAddress userAddress = new UserAddress();
UserEmployer userEmployer = new UserEmployer();

根据提交的信息,一些类最终填充了属性,而有些则没有。

例如,检查userInfo类是否最终分配了属性的最佳方法是什么?如果某个特定对象没有分配任何实际属性并且所有属性都设置为 null 或 ",我不想将它保存到数据库中。

我只想保存最终至少分配了一个不动产的对象。

使用NHibernate将数据保存到数据库

在保存到数据库之前,检查类是新实例还是至少填充了一个属性

public interface IPersistable{
    bool ShouldPersist {get;}
}
public class MyPersistable:IPersistable
{
    private bool _persist;
    public MyPersistable(){}
    public string MyValue{
        get{
            return _myValue;
        }
        set{
            _persist = true;// or validate with !IsNullOrEmpty() first
            _myValue = value;
        }
    }
    public bool ShouldPersist{
        get{
            return _persist;
        }
    }
}

您可以使用反射并循环访问属性,单独检查每个属性。

var type = userInfo.GetType();
var properties = type.GetProperties();

或者它们是字段而不是属性

var fields = type.GetFields();

然后,您可以检查每个值是否为 null 或某个值。

尝试创建一个所有三个类都实现的接口,提供一个沿 shouldSave()hasSetProperties() 行的函数,该函数检查每个数据字段,如果定义了其中任何一个,则返回 true。

甚至可能是一种以可以轻松传递到 NHibernate 的形式获取所有数据的方法。

如果您

没有任何可以分配给该对象的属性的值,请不要创建该对象的实例。

除此之外,"UserAddress"可能不是一个实体,而是一个值对象。