Свободная API-модель с едиными отношениями - PullRequest
0 голосов
/ 31 января 2019

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

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

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

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
    }

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

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

Спасибо взаранее!

Ответы [ 2 ]

0 голосов
/ 31 января 2019

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

  1. Как Siege21x рекомендует использовать в ваших запросах.

_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);

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

0 голосов
/ 31 января 2019

Просто смог разобраться с ответом.Если кто-то там будет таким же глупым, как я, просим вас сослаться.

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

_auth.Users.Include(u => u.Department);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...