Сначала код Entity Framework: как игнорировать классы
Это похоже на вопросы здесь и здесь, но они старые и не имеют хороших ответов.
скажем, у меня есть следующие классы:
class HairCutStyle {
public int ID { get; set; }
public string Name { get; set; }
}
class CustomerHairCutPreference {
public int ID { get; set; }
public Customer Customer { get; set; }
public HairCutStyle HairCutStyle { get; set; }
}
допустим, мои данные о стиле стрижки хранятся в таблице в другой базе данных (я получаю их от самого Пола Митчелла). Я хочу использовать класс HairCutStyle как класс POCO - то, что я буду использовать в коде для представления стилей стрижки, но мне не нужно читать / писать эту информацию в моя база данных. (Предположим, у меня есть отдельный уровень обслуживания, который может заполнять данные для этих классов из другой базы данных.)
Как я могу сказать EF не создавать таблицу HairCutStyle в моем текущем контексте БД? Но в то же время я хочу сохранить значение в таблице CustomerHairCutPreference, которое является ссылкой на данные HairCutStyle, хранящиеся в другом месте. "Виртуальный" внешний ключ, который не ограничен фактическим ограничением FK базы данных.
2 ответов
есть три вещи, чтобы обеспечить:
- убедитесь, что вы не подвергайте
DbSet<HairCutStyle>
в своемDbContext
-производный класс - убедитесь, что у вас нет никакого упоминания о
HairCutStyle
в своемOnModelCreating
переопределить - пометить
HairCutStyle
свойство с помощью
добавить свойство в CustomerHairCutPreference
на HairCutSytleID
а затем используйте на HairCutStyle
собственность. Обратите внимание, однако, что вы будете нести ответственность за обеспечение того, чтобы HairCutStyle
и HairCutStyleID
оставаться в синхронизации.
class CustomerHairCutPreference {
public int ID { get; set; }
public Customer Customer { get; set; }
public int HairCutStyleID {get; set; }
[NotMapped]
public HairCutStyle HairCutStyle { get; set; }
}
кроме того, вы можете использовать FluentAPI для исключения HairCutStyle
полностью от когда-либо отображаемого Entity Framework, что может быть полезно, если у вас есть несколько классов, которые ссылаются на него.
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Ignore<HairCutStyle>();
}