Это должен быть простой вопрос для хорошо знакомого пользователя EF.Сопоставление многих во многих отношениях с использованием внешнего ключа
У меня есть следующая схема (в моей голове) о том, как должны выглядеть отношения между таблицами.
[FooBar] [Foo] [Bar]
FooId PK,FK Id PK Id PK
BarId PK,FK BarId FK Name
IsRead Name Description
Description
Хотя, когда я пытаюсь генерировать схему с использованием EF-кодом первым он не интерпретировать отношения между сущностями, как я интерпретировал их (добавляет внешний ключ FooId
к [bar]
таблице) и не чтобы полностью создать таблицу моста [FooBar]
.
Если кто-то может направить меня на то, как достичь вышеуказанной схемы, используя код EF4, я бы очень признателен. Независимо от того, связано ли решение с атрибутами на моих моделях POCO, плавные конфигурации или гибрид обоих, не имеет большого значения - до тех пор, пока создается желаемая схема базы данных.
POCO Модели:
public class Foo
{
public int Id { get; set; }
public string Text { get; set; }
public string Description { get; set; }
public int BarId { get; set; }
public Bar Bar { get; set; } /* bar entity */
public virtual ICollection<Bar> BridgedBars { get; set; }
public Foo()
{
Bars = new List<Bar>();
}
}
public class Bar
{
public int Id { get; set; }
public string Text { get; set; }
public string Description { get; set; }
public virtual ICollection<Foo> Foos { get; set; }
public virtual ICollection<Foo> BridgedFoos { get; set; }
public Bar()
{
Foos = new List<Foo>();
BridgedFoos = new List<Foo>();
}
}
public class FooBar
{
public int FooId { get; set; }
public int BarId { get; set; }
public virtual Foo Foo { get; set; }
public virtual Bar Bar { get; set; }
public bool IsRead { get; set; }
}
Как вы имеют свойство (IsRead) в отношении FooBar, которое вы, вероятно, хотите установить из кода, и Foo, и Bar нуждаются в том, чтобы их связанные коллекции были FooBars. Как только вы наберете свойства с обоих концов (т. Е. Виртуальные коллекции в Foo и Bar) в FooBar EF, необходимо правильно создать отношение. Используйте HasMany(). WithRequired(), чтобы сопоставить каждый класс с FooBar. –