Сначала код 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 ответов


есть три вещи, чтобы обеспечить:

  1. убедитесь, что вы не подвергайте DbSet<HairCutStyle> в своем DbContext-производный класс
  2. убедитесь, что у вас нет никакого упоминания о HairCutStyle в своем OnModelCreating переопределить
  3. пометить 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>();
}