在 SQL Server 和 Entity Framework Core 中根据类型创建外键的正确方法

问题描述 投票:0回答:2

我在我的应用程序中使用 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, 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, 1),
    AppUserId INT NOT NULL,

    CONSTRAINT FK_Student_AppUser FOREIGN KEY (AppUserId)
    REFERENCES AppUser(Id)
);

我的问题:有没有更好的方式来维持这种关系。因为在实体框架中,当我尝试获取用户时,我总是需要检查

TypeId
并有一个用于该类型的 if else 块,然后对表 Student 或 Teacher 进行查询。任何建议都会很棒。谢谢!

sql-server database asp.net-core entity-framework-core foreign-keys
2个回答
0
投票

根据你的表结构,如果你想通过AppUser Id获取student,可以直接使用这段代码:

 var data = _context.Student.Include(x => x.AppUser).Where(x => x.AppUserId == userId).FirstOrDefault();

接下来只需区分

data
的参数即可。

如果data为

null
,则代表AppUser的Id不是学生而是老师(表示UserTypeId字段值为1),否则,你可以更新你想要的学生字段。

           if (data != null)
            {
               //update student
            }

0
投票

这是我的一个老问题,但我要求的是在 Entity Framework Core 中使用 DiscriminatorTable Per Type Configuration

查看Microsoft 的文档

© www.soinside.com 2019 - 2024. All rights reserved.