【发布时间】:2013-08-11 09:18:20
【问题描述】:
我的 EF Code First MVC 项目中目前有以下模型(为简洁起见进行了编辑):
public class Car
{
public int Id { get; set; }
public string Descrip { get; set; }
// Navigation Property.
public virtual CarColour CarColour { get; set; }
... + numerous other navigation properties.
}
public class CarColour
{
public int Id { get; set; }
public string ColourName { get; set; }
}
数据库中的 CarColour 表包含许多行。
在我的项目中,我有大约 10 个此类表,它们本质上是查找表。
我的任务是实现一种更可重用的方法,而不是拥有 10 个查找表(以及代码中 10 个相应的“硬”类型),而不是拥有大量特定于 Car 的查找表(在此示例中),沿着有几个表的思路,其中一个可以保存项目类型(颜色、燃料类型等),另一个包含每种类型的各种值。我们的想法是我们的模型将能够被许多其他项目重用——其中一些可能具有数百种不同的属性,因此,我们不想在代码中创建新的类/类型并生成每个都有一个新的查找表。
我很难理解这种方法的 c# 实现,希望有人能给我一个示例,说明如何在代码中实现这一点,更具体地说,上述模型需要如何更改,以及需要哪些额外的类来完成此操作?
【问题讨论】:
-
让持久性决定业务逻辑是发现自己处于数据没有意义的位置的好方法。通过允许其他代码直接访问您的持久性来加剧这种情况只是自找麻烦。
-
在我看来,您会添加和删除颜色,因此您将拥有数据库中不再列出颜色的汽车的历史记录。这将向我表明非规范化将是要走的路。您的颜色表仅用作当前颜色的查找,但是当将颜色分配给车辆时,它会与车辆记录一起移动,而不是作为关系。所以我建议非规范化。
-
汽车和颜色只是试图满足我的要求的一个例子。我最终需要一个“项目”,它可以有 x 个不同的属性/值与之关联,并且这需要尽可能通用,因此可以在针对不同项目的其他应用程序中重用相同的表模式和通用类(例如船,枪支等)
-
我不得不质疑这里的一般方法。为什么你不能做最简单的事情,即为唯一对象创建唯一表?您能否详细说明您的用例?
标签: c# database-design model