如何在数据库中持久化与c#类属性相关的显示属性

本文关键字:属性 显示 数据库 持久化 | 更新日期: 2023-09-27 18:16:13

所以这是我目前面临的问题:

  1. 我有从XML Schema动态生成的c# Business Object类

  2. 我动态地构建表单来显示和捕获绑定到我的业务对象的数据。

  3. 我将序列化(xml)对象存储到数据库中

  4. 我需要持久化与业务中的每个属性相关联的显示属性对象c#类(如何实现这个??)

假设我有一个Person Business对象:

public class Person
{
   public string Name {get;set;}
   public PhoneType Phone {get;set;}
}
public class PhoneType
{
   public string HomePhone{get;set;}
   public string WorkPhone{get;set;}
}

现在假设我创建一个新的Person:

Person me = new Person();
me.Name = "BOB";
me.Phone = new PhoneType()
me.Phone.HomePhone = "1234";
me.Phone.WorkPhone = "4321";

现在当我创建表单时,我知道Person。名称是一个宽度为300,高度为30的文本框和我的PhoneType。HomePhone和PhoneType。WorkPhone是宽度为200,高度为30的文本框。

在数据库中持久化这些显示属性并将它们关联到业务对象中的每个属性的最佳方法是什么?考虑到我的大多数业务对象都是由非常深入的对象图表示的……所以我想知道最好的方法是递归地存储和根据我的模型的深层层次性质从数据库重新生成显示属性。

现在有几个条件:-我不想存储静态表单,因为我的应用程序是非常动态的。XSD ->代码->表单-显示属性可能是用户特定的(例如,某些字段的背景色),所以不能只有通用的表单模板-我只需要一个很好的机制来关联POCO属性来显示属性,这样我就可以在飞行中构建我的表单并将更改持久化到数据库

我目前正在探索在每个业务对象中创建PropertyBag(集合)属性的可能性,并在导航对象图时递归地填充它们,但还没有走远。

如何在数据库中持久化与c#类属性相关的显示属性

我们处理这个问题的方法是为每个类提供唯一的标识符属性,然后在数据库中存储UI定义,包括必需的字段、大小、标签值等。

我们实际上还为类中的每个属性赋了属性,以便将那些在视觉上很重要的属性与那些仅作为"助手"的属性区分开来。

在运行时,我们使用反射来检索要显示的类和属性的属性,然后从数据库中获取适当的可视修饰符列表。