首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6组合键(DateTime +外键)

实体框架6组合键(DateTime +外键)
EN

Stack Overflow用户
提问于 2015-02-11 13:57:19
回答 1查看 657关注 0票数 1

我必须将以下实体存储在数据库中:

  • 设备
  • 测量点
  • 测量值

其中每个设备都有一个或多个测量点。测量值表将每10分钟存储一次每个测量点的值。这张表在几年后将有数以百万计的记录,必须通过测量点和时间戳有效地搜索。您将如何设计这与EF6代码-优先?

我的第一个方法是:

代码语言:javascript
复制
public class Device
{
    public int ID { get; set; }

    public int DeviceNumber { get; set; }

    ...

    public virtual ICollection<MeasuringPoint> MeasuringPoints { get; set; } 
}

public class MeasuringPoint
{
    public int ID { get; set; }

    public int MeasuringPointNumber { get; set; }
    ...

    // Foreign key 
    public int DeviceID { get; set; }

    public virtual Device Device { get; set; } 
}

public class MeasuredValue
{
    //public int Id  { get; set; } ????

    public DateTime TimeStamp { get; set; }

    // Foreign key 
    public int MeasuringPointID { get; set; }

    public double Value;

    public virtual MeasuringPoint MeasuringPoint { get; set; } 
}

在TimeStamp和MeasuringPointID组合中,测量值表中的所有值必须是唯一的。我应该为MeasuredTable定义什么主键?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-11 14:30:47

这并不是唯一与code_first/EF相关的。

使用EF,您可以选择将导致创建集群索引的PK。然后,您可能/必须为querie创建特定的索引(Es)。

Imho,你可以:

  • 使用标识pk (更快的插入)
    • 创建(覆盖)索引(点、日期)
    • 创建(覆盖)索引(日期、点)

  • 使用pk (点,计数器),其中计数器是标识或类似于(max for point) + 1的东西,甚至是日期(但是如果在同一毫秒内有2个度量呢?)
    • 创建索引(日期、点)

根据您的事务和并发压力,max解决方案可能很难实现。

在最后一种情况下,您将拥有如下的配置:

代码语言:javascript
复制
public class MeasuredValueConfiguration : EntityTypeConfiguration<MeasuredValue>{
    public MeasuredValueConfiguration()
        : base() {
        /* ... */

        HasKey(e => new {e.MeasuringPointID, e.Id});           

        /* ... */
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28456183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档