【问题标题】:NHibernate access to hbm.xml field settingsNHibernate 访问 hbm.xml 字段设置
【发布时间】:2012-02-28 14:10:12
【问题描述】:

我有一个在 .NET 2 中创建的现有 NHibernate 应用程序,它是一个 WinForms 应用程序,具有为数据类和所有 hbm.xml 文件编译的单独 DLL。

我现在要做的是通过将边框更改为红色,在表单上显示哪些字段不可为空。

问题是我似乎找不到任何地方可以循环浏览表单上的绑定字段(我可以这样做),并读取 not-null="false"(或 true)参数。

有什么想法吗?

我对 Fluent NHibernate 持开放态度,但这是一个 VB.NET 应用程序,而且我是 Fluent Nhibernate 菜鸟 :-)

也可以通过其他方式做到这一点,只要我能让它们相当好地融入应用程序 :-)

谢谢!

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    您无需阅读 hbm.XML 文件目录,因为 SessionFactory 包含有关所有映射实体的 MetaData。查找实体的所有元数据的一种方法如下;

    SessionFactory 建立后:-

    var metaData = SessionFactory.GetClassMetadata(typeof(Model.Entities.Client));
    for (int i = 0; i < metaData.PropertyNames.Length -1; i++)
    {
        System.Diagnostics.Debug.Print(metaData.PropertyNames[i]);
        System.Diagnostics.Debug.Print(metaData.PropertyNullability[i].ToString());
    }
    

    在我的情况下,我得到以下信息:-

    Name
    False
    Address1
    False
    Address2
    True
    ...
    Postcode
    True
    

    记住,FALSE 表示 NOT-NULL,即该属性需要一个条目

    另一种方法是将DataAnnotations 添加到模型属性中。

    [Required(ErrorMessage = "You must supply a postcode")]
    public virtual string Postcode { get; set; }
    

    互联网上有很好的文章向您展示如何在 winforms 项目中使用它。

    【讨论】:

    • 谢谢,效果很好。对于那些对 VB.NET 有要求的人,这里是等价的:Dim metaData As NHibernate.Metadata.IClassMetadata Dim tObjType As System.Type Dim i As Integer tObjType = Model.Entities.Client.GetType() metaData = classGlobal.tFactory.GetClassMetadata(tObjType) For i = 0 To metaData.PropertyNames.Length System.Diagnostics.Debug.Print(metaData.PropertyNames(i)) System.Diagnostics.Debug.Print(metaData.PropertyNullability(i).ToString()) Next 抱歉格式化!
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多