0

我目前正在编写一个具有相对规范化的 SQL 数据库后端的 N 层架构的 ASP.NET 系统,但我正在努力了解如何在我的业务对象中表示查找值(我没有特权使用 EF 或 ORM)。我的表(例如)可以这样构造:

核心数据表:

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

颜色查找:

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对象,该对象拉回对象的只读版本,所有查找值都转换为它们的描述性名称。

我 100% 确信我 (a) 想太多了,并且 (b) 让它变得比需要的更复杂。那么,有没有首选的方法呢?或者有没有我忽略的选项?任何帮助表示赞赏,我已经解决了几个小时没有做出决定。

谢谢。

4

2 回答 2

0

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

于 2011-03-25T14:26:08.387 回答
0

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

在不了解您的系统的情况下,我会说选项 1 可能是最好的——如果您要缓存一系列 Color 对象,那么您就不需要每次都访问数据库。

于 2011-03-25T14:27:22.180 回答