У меня проблема с соединением двух таблиц в FluentAPI. На самом деле это смесь FluentAPI и аннотаций данных. Я посмотрел на этот вопрос , но он мне не помог. Я пробовал с Index
, сочинил уникальные ключи.
В основном Foo
является основной таблицей. Bar
таблица не обязательна. Они связаны через две колонки. Пары key1
и key2
являются уникальными. Думайте об этом как о родительско-дочерних отношениях с ограничением, что 1 родитель может иметь только 1 ребенка:
Сущности данных выглядят так:
[Table("foo")]
public class Foo
{
[Key]
[Column("pk", TypeName = "int")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FooId { get; set; }
[Column("key1", TypeName = "int")]
public int Key1 { get; set; }
[Column("key2", TypeName = "int")]
public int Key2 { get; set; }
public Bar Bar { get; set; }
}
[Table("bar")]
public class Bar
{
[Key]
[Column("key1", TypeName = "int", Order = 1)]
public int Key1 { get; set; }
[Key]
[Column("key2", TypeName = "int", Order = 2)]
public int Key2 { get; set; }
public Foo Foo { get; set; }
}
Вот как я пытался их соединить:
modelBuilder.Entity<Bar>().HasRequired(p => p.Foo).WithOptional(p => p.Bar);
Что не так?
Bar
Требуется Foo
. Foo
имеет опционально Bar
. <--- этого должно быть вполне достаточно, потому что <code>Foo имеет столбцы, названные точно так же, как первичные ключи в Bar
. Но это не работает.
Итак, я попытался указать внешние ключи:
modelBuilder.Entity<Bar>().HasRequired(p => p.Foo).WithOptional(p => p.Bar).Map(p => p.MapKey(new[] { "key1", "key2" }));
Там написано:
"Количество указанных столбцов должно соответствовать номеру первичного ключа
Столбцы "
Whaaaat? как? Как так? Гм ..
Я тоже пробовал:
modelBuilder.Entity<Bar>().HasIndex(table => new { table.Key1, table.Key2 });
Итак, мои вопросы:
Почему мое решение не работает? У меня есть комплексный ключ, указанный
Как мне сделать это?