我有4个子类:Video
,Image
,Note
和Form
。每个包含不同类型的数据。例如,Image
类包含磁盘上图像文件的路径和图像属性,并且Form
类包含表单字段值。各项目之间的共同元素,但是,GPS坐标和航向,所以我有以下的抽象基类:模拟抽象基类和数据库中的子类
public abstract class Content
{
public float? Latitude { get; set; }
public float? Longitude { get; set; }
public float? Heading { get; set; }
}
然而,使人感到困惑的是如何在数据库建模。目前我有一个名为Events
(举例来说,假设一个事件是生日派对)和一个表格(Videos
,Images
,Notes
和Forms
)。每个表都有一个连接到Events
主键的外键。
使用LINQ-to-SQL,我为每个表获得5个类。这很好,如果我只想要一种类型的数据,例如Event.Images
,但我想要做的是统计Event
拥有的“内容”的总数并获取GPS坐标。我只需使用Event.Images.Count() + Event.Videos.Count() + ...
即可轻松完成计数,但我无法对GPS坐标进行相同操作。有什么方法可以模拟数据库,以便我可以为每个项目使用基类,并且在需要查看其数据时仍能够获取单个强类型项目?
感谢您的链接。他们对如何使用这些模型并没有给出很好的描述,但它给了我一个做更多研究的起点。就我个人而言,我一直认为单表模型是一个坏主意,因为这意味着如果您添加一个新的子类,则必须为其数据添加新列,并且可能会膨胀到不合需要的大小,尽管对于较小的应用程序,我可以看到使用它的优点。 – 2009-09-21 21:58:22
雅,有一定的权衡。这只取决于添加新类型的可能性。如果不太可能,最好避免遍历多个表并使用单个表。如果可能的话,其他模式之一。而且,是的,这些链接相当稀少,因为他们希望你购买这本书:-)这是一本好书 - 值得我思考。 – SingleShot 2009-09-21 22:02:54