流利的API单关系模型

时间:2019-01-31 05:43:07

标签: entity-framework asp.net-core asp.net-core-2.0

我对Entity Framework还是很陌生,尽管我对C#有很好的了解,但是最近三年我一直是PHP的Web开发人员。

我正在尝试将我的用户表与我的部门表相关联。每次运行时,它只会在用户

部门属性上返回空值

这是我的建造者

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 :(得分:1)

您有三个选择。

  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。使用延迟加载。为此,请安装Microsoft.EntityFrameworkCore.Proxies nuget软件包。然后将以下行添加到您的dbContext类中

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

您可以从官方website那里获得其他信息

答案 1 :(得分:0)

只是能够弄清楚答案。如果外面有人像我一样傻,请参考。

因此,当发生关系时,必须指定要包括相关模型。所以..

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