Мой пример похож на следующий: у меня есть [Table1], который имеет отношение «один ко многим» к [Table2].
Допустим, он выглядит следующим образом:
[Table1]:
[Id] int
[Table2]:
[Table1Id] int (foreign key to [Table1])
[UniqueColumnAtTable2ForGivenTable1Id] int
[Table2] действительно имеет внешний ключ к [Table1], и в [Table2] может быть несколько элементов, имеющих отношение к [Table1].
Я знаю, как определить отображение между [Table1] и[Table2] из кода означает:
public class Table1
{
public int Id { get; set; }
public virtual ICollection<Table2> Table2Objects { get; set; }
}
public class Table1_Mapping : EntityTypeConfiguration<Table1>
{
public class Table1()
{
this.HasKey(x => x.Id);
this.HasMany(x => x.Table2Objects).WithOptional().HasForeignKey(x => x.Table1);
}
}
Но есть ли способ определить Entity Framework Отображение, где я бы указал отображение Один-ко-многим, но только с отображением в одна конкретная строка из [Table2]?У меня есть [UniqueColumnAtTable2ForGivenTable1Id] столбец в [Table2], который всегда уникален для данного [Table1] - поэтому я знаю, что выполнение чего-то вроде:
SELECT * FROM [Table2] WHERE [Table1Id] = 123 AND [UniqueColumnAtTable2ForGivenTable1Id] = 456
всегда приведет к одномузапрос строки.
Из кода C #, что мне нужно, это что-то вроде:
public class Table1
{
public int Id { get; set; }
public virtual ICollection<Table2> Table2Objects { get; set; }
public virtual Table2 Table2Object456 { get; set; }
}
public class Table1_Mapping : EntityTypeConfiguration<Table1>
{
public class Table1()
{
this.HasKey(x => x.Id);
this.HasMany(x => x.Table2Objects).WithOptional().HasForeignKey(x => x.Table1);
this.MagicMethod(x => x.Table2Object456).WithOptional().HasForeignKey(x => x.Table1).OtherMagicMethodWhichAllowsToPutFilter(x => x.UniqueColumnAtTable2ForGivenTable1Id == 456);
}
}
Конечно, этот фрагмент мне нужен:
this.MagicMethod(x => x.Table2Object456).WithOptional().HasForeignKey(x => x.Table1).OtherMagicMethodWhichAllowsToPutFilter(x => x.UniqueColumnAtTable2ForGivenTable1Id == 456);