Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一对一实体框架_Sql_Visual Studio_Entity Framework_Entity Framework Core - Fatal编程技术网

Sql 一对一实体框架

Sql 一对一实体框架,sql,visual-studio,entity-framework,entity-framework-core,Sql,Visual Studio,Entity Framework,Entity Framework Core,我先编写实体框架代码来设置数据库 我有两门课,他们的关系是一对一,讲师和LoginInfo public class Lecturer { public int LecturerId { get; set; } public string FullName { get; set; } public int UserId { get; set; } public LoginInfo LoginInfo { get; set;

我先编写实体框架代码来设置数据库

我有两门课,他们的关系是一对一,讲师和LoginInfo

public class Lecturer
    {
        public int LecturerId { get; set; }
        public string FullName { get; set; }

        public int UserId { get; set; }
        public LoginInfo LoginInfo { get; set; }

    }

public class LoginInfo
{
    public int UserId { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public bool ChangePassword { get; set; }

    public Lecturer Lecturer { get; set; }
}
因此,对于我的实体框架,我为一对一关系编写了这篇文章

modelBuilder.Entity<Lecturer>()
                .HasOne(input => input.LoginInfo)
                .WithOne(input => input.Lecturer)
                .HasForeignKey<Lecturer>(input => input.UserId);
modelBuilder.Entity()
.HasOne(input=>input.LoginInfo)
.WithOne(输入=>input.讲师)
.HasForeignKey(输入=>input.UserId);
从上面的代码来看,这是否意味着讲师有一个LoginInfo,LoginInfo有一个讲师,讲师有一个UserId作为外键

另一个问题是,对于这种一对一的关系,我是否必须为LoginInfo编写另一组代码,如下所示:

modelBuilder.Entity<LoginInfo>()
                .HasOne(input => input.Lecturer)
                .WithOne(input => input.LoginInfo)
                .HasForeignKey<LoginInfo>(input => input.LecturerId);
modelBuilder.Entity()
.HasOne(输入=>input.讲师)
.WithOne(输入=>input.LoginInfo)
.HasForeignKey(输入=>input.讲师ID);
我只是一个尝试学习的初学者,谢谢你的帮助:)

从上面的代码来看,这是否意味着讲师有一个LoginInfo,LoginInfo有一个讲师,讲师有一个UserId作为外键

对。这也意味着
LoginInfo
是关系的主体,
讲师
是关系的依赖端。此外,由于FK属性不可为空,因此需要关系,即为了创建
讲师
,必须先创建
登录信息
,该信息与另一个
讲师
无关

还要注意的是,由于
用户ID
没有遵循PK名称的默认约定,因此应该将其显式配置为
登录信息的PK

modelBuilder.Entity<LoginInfo>()
    .HasKey(e => e.UserId);
modelBuilder.Entity()
.HasKey(e=>e.UserId);
另一个问题是,对于这种一对一的关系,我是否必须像这样为LoginInfo编写另一组代码

否。单个关系需要单个配置和单个FK。如果这样做,您将定义第二个关系,这也将在实体之间创建循环依赖关系,这通常应该避免。第一个fluent配置完全定义了所需的关系,足以处理加载相关数据和其他CRUD操作


有关术语、关系类型和配置的更多信息,请参阅EF Core文档的部分。

感谢您的详细解释!一对多的关系怎么样?我是否只需要一个配置,就像一对一的关系一样?不客气,很高兴它有帮助:)基数不重要。单个关系涉及两个端点(
具有
/
),但单个配置具有单个FK和0、1或2导航属性。