Я очень новичок в 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
}
Я был бы очень признателен за любую помощь, даже не за конкретный код, а за саму концепцию, стоящую за ним. Хотя было бы лучше иметь его, пока я понимаю концепцию.
Кроме того, правильно ли я понимаю отношения, что у меня отношения один на один?
Заранее спасибо!





Только что смог найти ответ. Если кто-то там будет таким же тупым, как я, пожалуйста, сошлитесь.
Поэтому, когда возникает связь, вы должны указать, что вы включаете связанную модель. Так..
_auth.Users.Include(u => u.Department);
У вас есть три варианта.
_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);
Вы можете получить дополнительную информацию от официального Веб-сайт
Поскольку есть больше примеров и способов, я буду считать это лучшим ответом. Спасибо за информацию! Я обязательно посмотрю на это использование!