问题: 嗨,大家好。我正在使用EF core 2.1,我需要在表InstallationInformation中将属性LicenceKey和Importrun(FK)赋予唯一索引(组合)。
添加的信息: 如果我对我所做的研究正确。我无法在.net Core 2.1中使用注释[index],因为它不受支持。我试图升级,但它需要我没有的VS 2019。要使用VS 2019,我需要我也没有使用过的Windows 10。
我尝试过的方法。 我尝试了Annotation的东西。但是不幸的是它没有用。 我发现可以尝试使用Fluent API,并且可以映射该属性。
modelBuilder.Entity<InstallationInformation>(entity =>
{
entity.HasIndex(i => new { i.LicenceKey, i.ImportRun }).IsUnique();
});
但是当我调试时,出现了此错误 “ InvalidOperationException:'ImportRun'不能用作实体类型'InstallationInformation'的属性,因为它被配置为导航。”
代码结构:
public class ImportRun
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ImportRunId { get; set; }
public DateTime ExtractedDate { get; set; }
public DateTime ProcessDate { get; set; }
public ResultCondition ProcessResult { get; set; }
public string FailureDescription { get; set; }
[Required]
public virtual ICollection<InstallationInformation> InstallationInformation { get; set; }
}
public class InstallationInformation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InstallationInformationID { get; set; }
[MaxLength(256)]
public string LicenceKey { get; set; }
[MaxLength(256)]
public string ProductVersion { get; set; }
[MaxLength(256)]
public string ProductName { get; set; }
[MaxLength(256)]
public string CompanyName { get; set; }
public DateTime Timestamp { get; set; }
[Required]
public ImportRun ImportRun { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ImportRun>()
.HasMany(c => c.InstallationInformation)
.WithOne(e => e.ImportRun)
.IsRequired();
modelBuilder.Entity<InstallationInformation>(entity =>
{
entity.HasIndex(i => new { i.LicenceKey, i.ImportRun }).IsUnique();
});
}
答案 0 :(得分:0)
更改:
modelBuilder.Entity<InstallationInformation>(entity =>
{
entity.HasIndex(i => new { i.LicenceKey, i.ImportRun }).IsUnique();
});
收件人:
modelBuilder.Entity<InstallationInformation>(entity =>
{
entity.HasIndex(i => new { i.LicenceKey, i.ImportRunId }).IsUnique();
});