Ответы пользователя по тегу Entity Framework
  • Как в EntityFramework настроить отношения между таблицами, которые ссылаются друг на друга по внешнему ключу?

    Razbezhkin
    @Razbezhkin Автор вопроса
    программист, преподаватель
    Спасибо Толстый Лорри, за подсказку.
    Действительно, без указания ссылки на коллекцию записей в дочерней таблице в виде вот такого свойства:

    public virtual ICollection Messages { get; set; }

    EF не мог понять, в каких отношениях находятся эти две таблицы.
    но этого оказалось недостаточно, т.к. все равно существовала неоднозначность, которую получилось разрешить при помощи атрибута InversePropertyAttribute, который я добавил перед этим самым свойством.

    в результате структура классов стала вот такой:

    public class ForumTopic
    {
            [Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
            public int TopicId { get; set; }
            public int LastMessageId { get; set; }
            [ForeignKey("LastMessageId")]
            public virtual ForumMessage LastMessage { get; set; }
            [InverseProperty("Topic")]
            public virtual ICollection<ForumMessage> Messages { get; set; }
    }
    
    public class ForumMessage
    {
            [Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
            public int MessageID { get; set; }
            public int TopicID { get; set; }
            [ForeignKey("TopicID")]
            public virtual ForumTopic Topic { get; set; }
    }
    Ответ написан
    Комментировать
  • Как кэшировать результаты Entity Framework без Lazy Load и подключенного соединения к БД?

    Razbezhkin
    @Razbezhkin Автор вопроса
    программист, преподаватель
    Спасибо.
    Оказывается, в DB контексте есть специальные настройки, которые могут напрочь отрезать сущности от контекста:
    вот кусочек кода, который настраивает контекст:

    CFDB rocontext = new CFDB();
    rocontext.Configuration.ProxyCreationEnabled = false;//запрещает использовать прокси классы - на выходе у нас те самые типы, которые мы определяли в моделях
    rocontext.Configuration.LazyLoadingEnabled = false;//здесь запрещается использовать отложенную подгрузку данных, и если мы не указали в Include сущности, которые нам понадобятся, то получим исключение
    rocontext.Configuration.ValidateOnSaveEnabled = false;//отключает проверку при сохранении, а сохранение вообще не подразумевается
    rocontext.Configuration.AutoDetectChangesEnabled = false;//отключает проверку на наличие изменений при сохранении, а сохранение вообще не подразумевается

    вроде бы такой вариант меня устраивает - ничего кроме нужных мне сущностей не остается и их можно безопасно кэшировать.
    Ответ написан
    Комментировать