Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何创建多列”;参考资料;带有EF6的c#模型中的索引(连接索引)_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

“如何创建多列”;参考资料;带有EF6的c#模型中的索引(连接索引)

“如何创建多列”;参考资料;带有EF6的c#模型中的索引(连接索引),c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我知道如何在c#中创建公共多列索引,这是数据库中的映射表。 但我遇到一个关于多列索引的特殊问题,下面是代码: public class Table1 { [Index("MultipleIndexColumn",1)] public Table2 Table2_ID {get; set;} [Index("MultipleIndexColumn",2)] public Table3 Table3_ID {get; set;} [Index("MultipleIndexColu

我知道如何在c#中创建公共多列索引,这是数据库中的映射表。 但我遇到一个关于多列索引的特殊问题,下面是代码:

public class Table1
{
  [Index("MultipleIndexColumn",1)]
  public Table2 Table2_ID {get; set;}
  [Index("MultipleIndexColumn",2)]
  public Table3 Table3_ID {get; set;}
  [Index("MultipleIndexColumn",3)]
  public DateTime CreateDateTime {get; set;}
}
EF6将生成如下的t-sql:

在表1上创建索引MultipleIndexColumn(CreateDateTime)
这不是预期的sql语句

以下是我的期望:
在表1上创建索引MultipleIndexColumn(表2\u ID、表3\u ID、CreateDateTime)


你们能帮忙吗?

我想你们的问题可能是使用“导航属性”=引用类型。您应该尝试将外来ID定义为单独的属性,并将其标记为:

public class Table1
{

  public Table2 Table2Ref {get; set;}

  public Table3 Table3Ref {get; set;}

  [Index("MultipleIndexColumn",3)]
  public DateTime CreateDateTime {get; set;}

  [Index("MultipleIndexColumn",1)]
  public int Table2Id {get; set;}
  [Index("MultipleIndexColumn",2)]
  public int Table3Id {get; set;}
}
或者您可以改用fluent api

您可以使用fluentapi来定义这样的索引

有关IndexAttribute中可用设置的完整列表,请参阅 代码的索引部分首先是数据注释。这包括 自定义索引名称、创建唯一索引和创建 多列索引


您只能在
基本数据类型
上创建索引键。请按如下所示进行尝试

public class Table1
{

      [ForeignKey("Table2_ID")]
      public virtual Table2  Table2 { get; set; }

      [Index("MultipleIndexColumn",1)]
      public int Table2_ID { get; set; }

      [ForeignKey("Table3_ID")]
      public virtual Table3  Table3 { get; set; }

      [Index("MultipleIndexColumn",2)]
      public int Table3_ID { get; set; }

      [Index("MultipleIndexColumn",3)]
      public DateTime CreateDateTime {get; set;}

    }
谢谢你激励我。 以下是解决方案: 如上所述,您只能在基本数据类型上创建索引键

public class Table1
{

      [ForeignKey("Table2_ID")]
      public virtual Table2  Table2 { get; set; }
      // here is important
      [Index("MultipleIndexColumn",1)]
      public int Table2_ID { get; set; }

      [ForeignKey("Table3_ID")]
      public virtual Table3  Table3 { get; set; }
       // here is important
      [Index("MultipleIndexColumn",2)]
      public int Table3_ID { get; set; }

      [Index("MultipleIndexColumn",3)]
      public DateTime CreateDateTime {get; set;}

    }
在代码中,EF6按照我的预期生成索引, 在表1上创建索引MultipleIndexColumn(表2\u ID、表3\u ID、CreateDateTime)

EF6没有在数据库中生成冗余列Table3No,Table2No。
那太好了。

如果我这样做,就不会有外键引用约束。我知道你的方法是可行的,因为类型是基元类型。我需要外键约束谢谢你激励我,我得到了解决方案谢谢你激励我。没问题!:D