VB.NET如何存储多个对象(不同类类型)

时间:2012-03-22 16:40:26

标签: vb.net class storage

此刻我的大脑已经被炒了,所以这就是场景。

我有一个表单,可以将成员添加到我的VB.NET应用程序中。

当我按提交时,我会添加他们的详细信息:姓名和号码以及他们想要的产品(互联网和电话)。互联网和电话是他们自己的班级成员。

我想补充说,无论他们选择了什么,还是会员存储它。

编辑:

所以它看起来像这样:

会员: 名字 - 鲍勃 数字 - 118 手机=真 互联网=错误

这将是一条记录。

我可以将所有3个存储在哪里,因此可以参考所有3个?它让我疯了。

我最初有一个数组,无论它们是否存在,都有真或假,但那是在我实现类之前。

我还使用了一个集合来存储成员,这些成员几乎包含所有内容。

有什么想法吗?

正如所发生的那样,一旦成员被创建(存储),我将输入他们已经使用了多少,然后存储它。但要这样做,我将需要访问与该成员相关的互联网和电话课程。

2 个答案:

答案 0 :(得分:1)

一种解决方案是定义一个定义类的公共属性的接口。例如,使用Selectable方法定义getType()。此界面由PhoneInternet实现。然后,您可以为每个用户维护一个Selectable个对象的集合,并通过迭代每个用户的集合并确定存在哪些类型的可选项来构建行。

答案 1 :(得分:0)

这个问题分为两部分:

  1. 如何将信息存储在数据库中?
  2. 如何将信息存储在应用程序中?
  3. 数据库中存储的典型方案是成员是父记录,Internet和电话是子记录,存储在同一个表或不同的表中。

    我通常的偏好是将联系人信息存储在单个表中,其中Type字段描述记录中存储的数据类型,以及保存与记录关联的内容的单个字段(即Web地址,电子邮件地址等) )。

    在此设计中,您将在Contacts表中拥有对成员主键的外键引用,而成员主键不应与成员记录的内容相关。

    例如:

    CREATE TABLE Members
    (
            /* This table contains current information on a given Member */
    
            /* The unique id for this record */
          RecordId                   INTEGER          NOT NULL IDENTITY(1,1) ,
    
            /* The Member's first name */
          FirstName                  NVARCHAR(50)     NOT NULL ,
            /* The Member's middle name */
          MiddleName                 NVARCHAR(50)     NULL ,
            /* the Member's last name */
          LastName                   NVARCHAR(50)     NOT NULL ,
    
          CONSTRAINT PK_Members PRIMARY KEY
          (
                RecordId
          )
    )
    
    CREATE TABLE Contacts
    (
            /* The unique id for this record */
          RecordId                   INTEGER          NOT NULL IDENTITY(1,1) ,
    
            /* The member that this contact is associated with */
          MemberId                  INTEGER          NOT NULL ,
            /* The type of contact. Current values are:
               1  - Internent
               2  - Phone
            */
          Type                       INTEGER          NOT NULL ,
            /* The contact details */
          Reference                   NVARCHAR(MAX)   NOT NULL ,
    
          CONSTRAINT PK_Contacts PRIMARY KEY
          (
                RecordId
          ) ,
    
            /* Referential integrity notes:
    
               If the member is deleted, all associated records in this table will be automatically deleted
            */
          CONSTRAINT FK_Members_C FOREIGN KEY (
                MemberId 
          ) REFERENCES Members (
                RecordId
          ) ON DELETE CASCADE
    )
    

    为了在应用程序中存储信息,我个人更喜欢使用应用程序中的类镜像数据库中的表,因为它更易于维护和更具可扩展性:

    Public Class Member
        Public Property RecordId As Integer
        Public Property FirstName As String
        Public Property MiddleName As String
        Public Property LastName As String
    
        Public Property Contacts As New System.Collections.Generic.Dictionary(Of Integer, Contact)
    
    End Class
    
    Public Class Contact
        Public Property RecordId As Integer
        Public Property MemberId As Integer
    
        Public Enum Types
            None
            Internet
            Phone
        End Enum
    
        Public Property Type As Types
        Public Property Reference As String
    End Class
    

    但是,您也可以根据类型制作现有类的实例,因为数据正在从数据库中读取并存储在成员中。