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

时间:2016-02-18 18:19:28

标签: c# entity-framework entity-framework-6

我有这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&lt; SqlTraceFile&gt;

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 }
                ));

我的问题是它没有采取&#39; tracefile =&gt; tracefile.trace&#39;我猜这个实体想要外键来代替跟踪文件。跟踪&#39;。为了实现这个目标,我必须遵循一种模式吗?或者解决我的职位。

1 个答案:

答案 0 :(得分:1)

试试这个作为你的poco's:

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; }
}

你不会以这种方式需要流畅的代码。