У меня есть проект MVC с использованием EF6.1, и мне нужно добавить другой внешний ключ к модели. Я довольно новичок в этом поле, и я получаю сообщение об ошибке при добавлении миграции.EntityFramework two Foreign Keys Code First Migration issue
У меня есть 3 таблицы на месте (теги, содержание, страницы). В настоящее время существует FK между контентом & Найденные теги Определены Созданная система Tags_Content table для меня.
pubic class Content {
int Id { get; set; }
string Title { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public static new void Configure<TSelf>(EntityTypeConfiguration<TSelf> configuration)
where TSelf : Content
{
configuration.HasMany(o => o.Tags)
.WithMany(t => (ICollection<TSelf>)t.Content)
.Map(c => c.ToTable("Tags_Content"));
}
}
class Page : Content {
// extends general content
}
class Tag {
int Id { get; set; }
string Name { get; set; }
// add a column to Tags which will be the FK to Content or Pages
// the purpose is to implement an option of assigning additional page (or content) to a tag (the PageId is null or any page)
public int? PageId { get; set; }
public virtual Page Page { get; set; }
public static new void Configure<TSelf>(EntityTypeConfiguration<TSelf> configuration)
where TSelf : Tag
{
configuration.HasMany(a => a.Content)
.WithMany(a => (ICollection<TSelf>)a.Tags)
.Map(c => c.ToTable("Tags_Content"));
}
}
Я не могу написать правильную конфигурацию, определяющую FK. Может ли кто-нибудь здесь помочь мне? Благодарю.
Вы сталкиваетесь с каким-либо исключением? Какое исключение? Вы ищете способ указать имена столбцов в таблице «Tags_Content»? –
Привет, Джениш, я не вижу никаких исключений. Код выше хорошо. Мне нужно добавить инструкции конфигурации, которые создадут FK, где PageId ссылается на Content/Page и может быть NULL. Я пробовал это несколько раз, но всегда неправильно, что привело к тому, что EF не смогла создать модель при добавлении-миграции. – Tomas
Одна ошибка, которую я обнаружил в вашем коде. Вы определяете отношение «многие ко многим» дважды в классе «Содержание» и другое в «теге». Это неправильно. Вам нужно удалить любое заявление. –