【发布时间】:2019-01-18 12:09:30
【问题描述】:
我在 EF Core 2 中有几个课程。 1) 类服务器
- 具有 id 作为 Guid 类型。它是一个主键,自动递增。
2) SerStaHis 类
有 SerId 作为 Guid 类型。它是 Class Ser 的外键。它是一个带时间戳的主键
有时间戳。它是带有 SerId 的主键
我使用 EF Core 2 构建了上面的两个表。我使用复合键功能将 SerStaHis.timestamp 和 SerStaHis.SerId 组合为主键。
我还在 Class Ser 中使用 ForeignKey 属性。 问题是我已设法将外键映射到 SerStaHis 类,但我无法将该外键与 SerStaHis.timestamp 结合作为主键。
这里是 Class Ser、Class SerStaHis 和 OnModelCreating 方法的代码 sn-ps。
public class Ser {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] // auto-incrementing feature
public Guid id { get; set; }
//nav/foreign keys
[ForeignKey("id")]
public virtual ICollection<SerStaHis> SerStaHis{ get; set; }
}
public class SerStaHis{
[Required] // maybe this is wrong as I got a foreign key from Class Ser
public Guid service_id { get; set; }
[Required]
public DateTime timestamp { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
// composite primary keys method. // https://docs.microsoft.com/en-us/ef/core/modeling/keys
modelBuilder.Entity<SerStaHis>()
.HasKey(c => new {c.service_id, c.timestamp});
}
这是我迁移到 SQL 时得到的实际结果:
(来源:pbrd.co)
我在 SQL 中的预期结果如下:
(来源:pbrd.co)
如果您需要更多说明,请告诉我。
我可以用 FluentAPI 方法完成上述任务吗?
如何使用外键作为复合主键?
谢谢
【问题讨论】:
标签: c# foreign-keys entity-framework-core composite-primary-key ef-core-2.0