从外键和日期时间创建复合键

Posted

技术标签:

【中文标题】从外键和日期时间创建复合键【英文标题】:Create composite key from foreign key and DateTime 【发布时间】:2015-07-11 14:20:22 【问题描述】:

我刚开始使用 EF。一个用户有 0 个或多个权重,但同一日期最多只有一个。我该如何做到这一点?我想我应该创建一个复合键,但我没有找到要在 Date 属性之前添加的任何合适的属性。 这是我的两个模型:

public class User

    public int ID  get; set; 
    public string Name  get; set; 
    public virtual ICollection<Weight> Weights  get; set; 


public class Weight

    [ForeignKey("User")]
    [Column(Order=1)]
    public int UserID  get; set; 

    public DateTime Date  get; set; 
    public float Value  get; set; 

【问题讨论】:

一般来说,最好使用唯一的 id 键(不一定是 GUID),然后使用索引来方便多个值的访问并强制执行唯一约束。 【参考方案1】:

据我了解,您正在尝试存储一段时间内的体重波动,并且在相同的确切日期和时间拥有两个不同的体重是没有意义的。考虑到这一点,您只需将属性 [key] 添加到 Weight 类中的 UserID 和 Date 属性即可。

通过这种设计,当您从数据库中查询权重时,您可以按 Date 属性的日期和时间值对它们进行排序,最后一项将是最近的权重度量。

【讨论】:

以上是关于从外键和日期时间创建复合键的主要内容,如果未能解决你的问题,请参考以下文章

在复合键和外键之间创建关系

主键和外键的复合键不能建立关系

按外键和日期分组数据,按日期汇总

具有主键和外键的事实表

在复合键和 @ManyToOne JoinColumns 之间共享列

复合主键和外键 Code First