Sql 一对一实体框架
我先编写实体框架代码来设置数据库 我有两门课,他们的关系是一对一,讲师和LoginInfoSql 一对一实体框架,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;
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导航属性。