“如何创建多列”;参考资料;带有EF6的c#模型中的索引(连接索引)
我知道如何在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
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