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

时间:2016-02-18 17:06:23

标签: c# entity-framework

我有这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 :(得分:3)

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

    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而不是数据注释来做同样的事情,但主要的是你知道如何解决这个问题