2012-02-20 143 views
2

我想允许用户创建自己的实体,例如: - 学生(姓名,年龄,学校,照片等) - 动物(姓名,类型,国家等) ) - 汽车(品牌,颜色,价格等) 等应用程序的类结构和数据库结构

然后用户将能够根据创建的实体在数据库中添加记录。

所有的属性都是字符串。

我的问题是如何在数据库中最好地保存这些实体的实例。 为每个创建的实体创建一个新表,我认为是不可能的。 我在考虑在表中保存创建的每个实体的属性,然后在另一个表中实例化这些实体,这些属性将以逗号分隔,例如:

实体结构表(学生):

property_name entity_key 

name    student 
age    student 
school   student 
photo   student 

实体实例表:

instance    entity_key 

joe,19,nyhigh,joe.jpg student 

怎么样与我会创造这些记录实例的类? (?自动生成的类?)(?一个具有List属性的类,我将在其中分隔'joe,12,nyhigh,joe.jpg'字符串?) 有没有人遇到过这种类型的问题?

我将在asp.net C#中开发应用程序。

+0

问问你自己,如果数据在数据库中,你会怎么做?一般来说,不要在逗号分隔值中存储数据库 – Randy 2012-02-20 20:34:15

+0

首先,这是一项家庭作业吗?您还想要保存字符串的所有属性? – 2012-02-20 20:35:25

+0

不,它没有作业:)是的,他们的琴弦 – hhh3112 2012-02-20 20:36:08

回答

1

将实体序列化并将其保存在实例列中。如果您需要针对这些值执行数据库查询,请使用XML序列化。

public static string SerializeToString(object obj) 
{ 
    using (var serializer = new XmlSerializer(obj.GetType())) 
    using (var writer = new StringWriter()) 
    { 
     serializer.Serialize(writer, obj); 
     return writer.ToString(); 
    } 
} 
0

你可以做一个实体类型表和实体属性表,并涉及他们两个在一起。如果你的所有属性都是字符串。如果他们不是,你也可以在实体属性表中存储类型。

0

您将需要创建一个名称值对表,并将它指向一个student表

学生

ID INT
名字为nvarchar(50)
姓氏为nvarchar(50)

NameValue

ID int PK
Name nvarchar(50)
StudentID INT FK
价值为nvarchar(50)

,你会发现quering数据库将变成一个真正的麻烦,你需要的一切转动了它。但是,如果你的每个对象都是真正独特的,那么pivoting将无济于事。