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



我有这 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"。我必须遵循某种模式才能完成此操作吗?或者我的立场的解决方法。

试试这个作为你的poco:

public class SqlTrace
{
    public int Id { get; set; }
    //added indexes with annotations
    [Index("otherNameIndex", IsUnique = true)]
    public string Name { get; set; }
    //changed to ICollection
    public virtual ICollection<SqlTraceFile> TraceFiles { get; set; }
}
public class SqlTraceFile
{
    public int Id { get; set; }
    [Index("nameIndex", IsUnique = true)]
    public string Name { get; set; }
    //added the FK id property explicit and put an index on to it.
    [Index("indexname", IsUnique = true)]
    public int SqlTraceId {get;set;}
    public virtual SqlTrace Trace { get; set; }
}

这样你不需要流畅的代码。

最新更新