我知道如何在c#中创建通用的多列索引,这是数据库中的映射表。 但我在Multiple columns索引上遇到一个特定的问题,这里是代码:
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:
create index MultipleIndexColumn on Table1(CreateDateTime)
这不是预期的sql句子。
这是我的预期:
create index MultipleIndexColumn on Table1(Table2_ID,Table3_ID,CreateDateTime)
你们可以帮忙解决这个问题吗?
答案 0 :(得分:2)
您只能在 index keys
上创建Primitive Datatypes
。请尝试如下所示。
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;}
}
答案 1 :(得分:1)
感谢https://stackoverflow.com/users/1077309/sampath鼓舞我。 这是解决方案: as https://stackoverflow.com/users/1077309/sampath表示只能在Primitive Datatypes
上创建索引键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按照我的预期生成索引, 在Table1上创建索引MultipleIndexColumn(Table2_ID,Table3_ID,CreateDateTime)
和EF6 Didn不会在数据库中生成冗余列Table3No,Table2No。 那是完美的。
答案 2 :(得分:0)
我想你的麻烦可能在于使用“导航属性”=引用类型。您应该尝试将外部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;}
}
或者您可以使用流畅的api
您可以使用Fluent API来定义类似
的索引https://msdn.microsoft.com/en-us/data/jj591617.aspx?f=255&MSPPError=-2147217396#PropertyIndex
有关IndexAttribute中可用设置的完整列表,请参阅 代码优先数据注释的索引部分。这包括 自定义索引名称,创建唯一索引和创建 多列索引。