Единая реляционная модель Fluent API

Я очень новичок в Entity Framework, хотя хорошо разбираюсь в C#, но последние 3 года я работаю веб-разработчиком для PHP.

Я пытаюсь связать свою таблицу Пользователи с моей таблицей отделение. Каждый раз, когда я запускаю, он возвращает только значение null для моего свойства отделение для моего класса Пользователь.

это мой строитель

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Users>(entity =>
            {
                entity.HasOne(user => user.Department);
            });
        }

Класс отдела

[Table("department", Schema = "settings")]
    public class Department
    {
        [Key]
        public long id { get; set; }
        public string department_name { get; set; }
        public string department_code { get; set; }
    }

Класс пользователей

[Table("users", Schema = "settings")]
    public class Users
    {
        [Key]
        public long id { get; set; }
        public string emp_id { get; set; }
        public string username { get; set; }
        public string password { get; set; }
        public string salt { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string middle_initial { get; set; }
        public string display_name { get; set; }
        public string email { get; set; }
        public long proj_id { get; set; }

        [ForeignKey("Department")]
        public long dept_id { get; set; }
        public long job_id { get; set; }
        public byte is_active { get; set; }
        public DateTime? date_approved { get; set; }
        public DateTime? date_created { get; set; }
        public DateTime? birthday { get; set; }

        public virtual Department Department { get; set; }
    }

Пример вывода

    {
        "id": 11,
        "emp_id": "100156",
        "username": null,
        "password": "dvser32Z2CaapKM = ",
        "salt": "o6k234RGOfasf = ",
        "first_name": "test",
        "last_name": "sample",
        "middle_initial": "M",
        "display_name": "test test",
        "email": null,
        "proj_id": 7,
        "dept_id": 1,
        "job_id": 146,
        "is_active": 1,
        "date_approved": "2018-06-10T13:20:04.513",
        "date_created": "2018-06-07T08:20:34.663",
        "birthday": null,
        "department": null
    }

Я был бы очень признателен за любую помощь, даже не за конкретный код, а за саму концепцию, стоящую за ним. Хотя было бы лучше иметь его, пока я понимаю концепцию.

Кроме того, правильно ли я понимаю отношения, что у меня отношения один на один?

Заранее спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Только что смог найти ответ. Если кто-то там будет таким же тупым, как я, пожалуйста, сошлитесь.

Поэтому, когда возникает связь, вы должны указать, что вы включаете связанную модель. Так..

_auth.Users.Include(u => u.Department);
Ответ принят как подходящий

У вас есть три варианта.

  1. Как предложил Siege21x, используйте include в своих запросах.

_auth.Users.Include(u => u.Department);

2. Используйте метод Load() для загрузки соответствующего поля каждый раз, когда вы пишете запрос.

using (var context = new BloggingContext())
{
    var user= context.Users
        .Single(b => b.BlogId == 1);

    context.Entry(user)
        .Collection(b => b.Departments)
        .Load();
}

3. Используйте ленивую загрузку. Для этого установите пакет nuget Microsoft.EntityFrameworkCore.Proxies. Затем добавьте следующие строки в свой класс dbContext

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(myConnectionString);

Вы можете получить дополнительную информацию от официального Веб-сайт

Поскольку есть больше примеров и способов, я буду считать это лучшим ответом. Спасибо за информацию! Я обязательно посмотрю на это использование!

Siege21x 03.02.2019 05:44

Другие вопросы по теме