如何将复杂类型包含在实体索引中

本文关键字:实体 索引 包含 类型 复杂 | 更新日期: 2023-09-27 18:35:18

我有这 2 个 POCO...

public class SqlTrace
{
    public int id { get; set; }
    public string Name { get; set; }
    public virtual List<SqlTraceFile> TraceFiles { get; set; }
}
public class SqlTraceFile
{
    public int id { get; set; }
    public string Name { get; set; }
    public virtual SqlTrace Trace { get; set; }
}

我在跟踪及其文件之间创建了一对多关系。我想添加一个索引,使 SqlTraceFiles 对其 SqlTrace 是唯一的;允许多个 SqlTraceFiles 命名相同,只要它们属于不同的 SqlTrace。

以下是我在SqlTraceFileConfiguration

中的内容:EntityTypeConfiguration

Property(TraceFile => TraceFile.Name)
                .IsRequired()
                .HasColumnAnnotation("Index", new IndexAnnotation(
                    new IndexAttribute("IX_SQLTracefile_FileTrace", 1) { IsUnique = true }
                    ));
Property(TraceFile => TraceFile.Trace)
                .HasColumnAnnotation("Index", new IndexAnnotation(
                    new IndexAttribute("IX_SQLTracefile_FileTrace", 1) { IsUnique = true }
                    ));

我的问题是它不接受"tracefile => tracefile.trace"我猜该实体想要外键代替"tracefile.trace"。我必须遵循某种模式才能完成此操作吗?或者我的立场的解决方法。

如何将复杂类型包含在实体索引中

在 TraceFile poco 中再添加一个属性SqlTraceId,它将表示外键的 id,并使用该属性创建索引。因此,在导航属性上,添加数据批注[ForeignKey="SqlTraceId "]以及NameSqlTraceId属性上的唯一索引批注位置。使用数据注释,您可以使用以下示例实现这一点:

    public class SqlTraceFile
    {
      public int id { get; set; }
      [Index("IX_SQLTracefile_FileTrace", 1, IsUnique = true)]
      public string Name { get; set; }
      [Index("IX_SQLTracefile_FileTrace", 2, IsUnique = true)]
      public int SqlTraceId { get; set; }
      [ForeignKey("SqlTraceId ")]
      public virtual SqlTrace Trace { get; set; }
   }

我认为您可以使用FluentAPI而不是数据注释来做同样的事情,但主要是您知道如何解决此问题