我使用EF 6.2创建了此示例,以使用模型的外键创建索引。
我喜欢创建没有外键的模型,以使模型更整洁,这样我就不会创建索引。
那是代码:
[Table("A")]
public class A
{
[Key]
public int Id { get; set; }
public string Description { get; set; }
}
[Table("B")]
public class B
{
[Key]
public int Id { get; set; }
public virtual A A { get; set; }
}
public class Context : DbContext
{
public DbSet<A> A { get; set; }
public DbSet<B> B { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Attempt 1
modelBuilder.Entity<B>().HasIndex(x => x.A).IsUnique();
//Attempt 2
modelBuilder.Entity<B>().HasIndex(x => x.A.Id).IsUnique();
base.OnModelCreating(modelBuilder);
}
}
两次尝试均因这些错误而出错:
尝试1:
序列中没有匹配的元素
尝试2:
属性表达式'x => x.B.Id'无效。该表达式应表示一个属性:C#:'t => t.MyProperty'VB.Net:'Function(t)t.MyProperty'。指定多个属性时,请使用匿名类型:C#:'t => new {t.MyProperty1,t.MyProperty2}'VB.Net:'Function(t)New with {t.MyProperty1,t.MyProperty2}'。>