У меня есть несколько классов в EF Core 2.
1) Класс Сер
- имеет идентификатор типа Guid. Это первичный ключ, автоинкрементный.
2) Класс SerStaHis
Я использую EF Core 2 для построения двух таблиц выше. Я использовал функцию составного ключа для объединения SerStaHis.timestamp и SerStaHis.SerId в качестве первичного ключа.
Я также использую атрибут ForeignKey в Class Ser.
Проблема в том, что мне удалось сопоставить внешний ключ с классом SerStaHis, но я не смог объединить этот внешний ключ с SerStaHis.timestamp в качестве первичного ключа.
Вот фрагменты кода для метода Class Ser, Class SerStaHis и OnModelCreating.
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:
Мой ожидаемый результат в SQL выглядит следующим образом:
Пожалуйста, дайте мне знать, если вам нужно больше разъяснений.
Можно ли выполнить вышеуказанную задачу в методе FluentAPI?
Как использовать внешний ключ в качестве составного первичного ключа?
Спасибо