【问题标题】:asp.net mvc3 entity framework look upasp.net mvc3实体框架查找
【发布时间】:2012-03-29 04:57:29
【问题描述】:

我有一个具有状态表的应用程序,请参阅 Database best practices - Status 以获取示例

我希望能够显示状态更改的历史记录。我可以看到两种使用 mvc3 和这样的实体模型来实现它的方法 - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

我总是可以在任何需要链接到状态表的对象上拥有一个 StatusID 属性,例如

工作
身份证
名称
状态ID

状态
ID 状态

或者,我可以有一个 StatusHistory 表,并将 StatusID 属性设为一个返回 Status 对象的函数,例如

工作
身份证
名称

状态
ID 状态

状态历史
身份证
作业ID
状态ID
日期

在 Job 模型类 (Job.cs) 上有一个名为 Status 的函数,它通过查询 StatusHistory 表中与 Job 相关的最新状态对象来返回 1 个状态对象。

有没有人做过类似的事情?

【问题讨论】:

  • 不得不不同意保留已弃用的数据是“最佳实践”。当然,有时事情需要有状态,但这并不意味着它们应该保存在主数据库中,因为它会变得混乱并且查询会变慢。
  • 一个具有高效索引的表我不会认为它很慢或很混乱。我们有 20+00 万行表,可以进行近乎即时的查找。

标签: asp.net asp.net-mvc asp.net-mvc-3 entity-framework


【解决方案1】:

你可能有

状态历史

  • 身份证
  • 工作编号
  • 状态ID
  • 日期

而 Job 包含当前的 StatusID

工作

  • 身份证
  • StatusID(最新)

这样您“缓存”作业的最新状态而不是搜索..

StatusHistories.OrderDescending(s => s.Date).FirstOrDefault(); //unnecessary task

每次你需要它。

【讨论】:

  • 感谢 ai.farfa。状态也有一个可选的注释,但它可能会以相同的方式设置它以获得最佳性能。
【解决方案2】:

您要查找的是Temporal Database。基本上,您无需保留大量状态代码,而是将逻辑分解为日期管道。例如,工作开始日期,工作完成日期。已完成的作业应在某个时候迁移到存档以保持数据库清洁。

【讨论】:

  • 感谢您的回答 Travis,根据您的其他评论,我唯一的反馈是关闭并不一定意味着“未使用”。取决于系统,它实际上可能被用作参考,就像这个网站一样 - 如果他们存档所有回答的问题会怎样。
  • @smartfaceweb - 我同意存档时需要一定程度的谨慎。不过,我认为您的示例并不完全相同,因为我在谈论移动数据与“软删除”或隐藏已弃用数据之间的区别,有些人将其用作拐杖。当存在标记为“已关闭”、“isActive”、“isDeleted”等的数据时,这可能很常见。我同意相关数据绝对必须保持可供参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
相关资源
最近更新 更多