我应该使用什么模型结构来跟踪变化?

时间:2011-08-02 23:40:50

标签: asp.net-mvc-3 database-design ef-code-first

我有一个需要跟踪更改的数据模型。我每月可以对我的模型进行大约100,000次更改/更新。我的模型涉及跟踪任务完成的方式,可以分解为3种基本类型。

我目前拥有这样的模型,但将三明治的类型划分为3个独立的控制器,因为每个三明治的制作方式非常不同:

public class Sandwich
{
    public int Id { get; set; }
    public int SandwichTypeId { get; set; } //This is an enum type
    //About a dozen other properties that define HOW the sandwich gets made
}

我可以像这样拆开它并将它与我的控制器更多匹配:

public class PeanutButterAndJellySandwich
{
    public int Id { get; set; }
    //No enum sandwich type
    //About a dozen other properties that define HOW the sandwich gets made
}

public class HamSandwich
{
    public int Id { get; set; }
    //No enum sandwich type
    //About a dozen other properties that define HOW the sandwich gets made
}

//等

2部分问题:

  1. 分解模型是否有任何优势?
  2. 如果是这样,那些优势是否会被打败,因为我还必须添加单独的跟踪表?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

在EF中,我做了类似于三明治类的子类化,并在特定控制器中使用它们。

另一方面,我通过例如再创建一个字段来处理这样的事情:

public class Sandwich
{
    public int? CurrentVersion { get; set; } 
    public int Id { get; set; }
    public int SandwichTypeId { get; set; } //This is an enum type
    //About a dozen other properties that define HOW the sandwich gets made
}

这样,单个三明治可以有很多以前的版本,所有这些都指向当前版本。在我的更新例程中,我创建了一个副本(旧版本的CurrentVersion指向原始版本,现在已更新,版本ID)。

这当然要求您更改列出三明治的其他地方,以便仅查找那些不是修订版的地方。

如果您需要立即引用上一个或下一个版本,则可以创建int? PreviousVersion和/或int? NextVersion以避免在数据库中进行搜索。