微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在SQL Server和Entity Framework Core中

如何解决在SQL Server和Entity Framework Core中

我在应用程序中使用Entity Framework Core和sql Server。我对外键非常熟悉,但是我想学习为基于类型的实体提供外键的正确方法

例如:

父类AppUser

CREATE TABLE AppUser
(
    Id INT NOT NULL PRIMARY KEY IDENTITY(1,1),Name VARCHAR(255) NOT NULL,UserTypeId SMALLINT NOT NULL --  !This is the important part for me! if 0 = Student if 1 = Teacher
);

CREATE TABLE Student
(
    Id INT NOT NULL PRIMARY KEY IDENTITY(1,AppUserId INT NOT NULL,CONSTRAINT FK_Student_AppUser FOREIGN KEY (AppUserId)
    REFERENCES AppUser(Id)
);

CREATE TABLE Teacher
(
    Id INT NOT NULL PRIMARY KEY IDENTITY(1,CONSTRAINT FK_Student_AppUser FOREIGN KEY (AppUserId)
    REFERENCES AppUser(Id)
);

我的问题:有没有更好的方式建立这种关系。因为在Entity Framework中,当我尝试获取用户时,我总是需要检查TypeId并为类型指定if else块,然后在学生或教师表上进行查询。任何建议都很好。谢谢!

解决方法

根据您的表结构,如果您想通过AppUser ID获得学生,则可以直接使用以下代码:

override fun onPrepareOptionsMenu(menu: Menu) {
    lifecycleScope.launch {
        viewModel.preferencesFlow
            .take(1) // I want this to update only when the fragment comes onto the screen,afterward it's unnecessary
            .collect {
                menu.findItem(R.id.action_hide_completed_tasks).isChecked = it.hideCompleted
            }
    }
}

接下来,您只需要区分 var data = _context.Student.Include(x => x.AppUser).Where(x => x.AppUserId == userId).FirstOrDefault(); 的参数即可。

如果数据为data,则表示AppUser的ID不是学生而是老师(,这意味着UserTypeId字段值为1 ),否则,您可以更新您想要的学生领域。

null

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。