应该如何在ASP.NET Business Objects中表示查找值?

时间:2011-03-25 14:19:45

标签: asp.net n-tier-architecture lookup-tables

我目前正在编写一个N-Tier架构的ASP.NET系统,它具有相对规范化的SQL数据库后端,但我很难理解如何在业务对象中表示查找值(我不知道)获得使用EF或ORM的特权)。我的表(作为示例)可以这样构造:

CoreDataTable:

ID | Name  | Favourite_Colour
---|-------|-----------------
01 | Peter | 01
02 | John  | 03
03 | Mary  | 05

ColoursLookup:

ID | Colour | is_active
---|--------|----------
01 | Red    | 1
02 | Green  | 1
03 | Blue   | 1
04 | Pink   | 1
05 | Black  | 1

最初,我创建了我的业务对象,如下所示:

public class Person
{
    protected int PersonID { get; set; }
    public string Name { get; set; }
    public int FavouriteColour { get; set; }
}

但是,例如,当我想列出数据库中的所有人以及他们喜欢的颜色时,我该怎么办?我不能只显示查找ID,所以在那一刻我看到4个选项:

  1. 向名为Person.GetColourStringValue的类添加一个方法,该类在调用时从数据库中获取颜色名称。这样效率很低,因为在100个“Person”对象上使用此方法将导致100次数据库查询。
  2. FavouriteColour对象的Person属性作为字符串,并在将人物对象写入数据库时​​进行反向查找(即获取颜色名称,并获取相应的ID)。在两种颜色在数据库中具有相同名称的不太可能的情况下,这是危险的IMO。
  3. 将ID和值存储在Person对象中,并在更新其中一个或另一个值时同步它们。对于相对简单的任务来说,这似乎过于复杂。
  4. 创建两个表示形式,Person对象和一个PersonSummary对象,它回取对象的只读版本,并将所有查找值转换为其描述性名称。
  5. 我100%确信我(a)过度思考这个问题,并且(b)让它变得比它需要的更复杂。那么,有没有一种首选方式呢?还是有一个我忽略的选择?感谢任何帮助,我现在已经解决了几个小时而没有作出决定。

    感谢。

2 个答案:

答案 0 :(得分:0)

如何在填充person表的查询中加入颜色表。在person对象上有一个FavouriteColor属性。该对象不是表列的真实表示,但所有需要的信息都将在db调用中检索。

答案 1 :(得分:0)

唯一正确的方法是选择一个,测量影响(必要时通过原型),然后将其与下一个选项的影响进行比较。

在不知道你的系统的情况下,我会说选项1可能是最好的 - 如果你要缓存一系列Color对象,那么你不需要每次都去数据库。

相关问题