实体框架为一对一关系创建另一列
本文关键字:一列 创建 框架 一对一 关系 实体 | 更新日期: 2023-09-27 18:10:22
我有以下模型:
public class ApplicationUser : IdentityUser
{
public int? StudentId { get; set; }
public virtual Student Student { get; set; }
}
public class Student : BaseEntity
{
public string UserId { get; set; }
public virtual ApplicationUser User { get; set; }
public string CreatedById { get; set; }
public virtual ApplicationUser CreatedBy { get; set; }
}
正如您所看到的,我在Student和ApplicationUser之间有两个一对一的关系,因此在ModelCreating中我定义了以下内容:
modelBuilder.Entity<ApplicationUser>()
.HasOptional(u => u.Student)
.WithRequired(s => s.User);
当数据库生成时,除了列名之外一切都很好,我期望在student中创建的列是UserId,但是它将列UserId创建为一个简单的列,并为关系创建另一个列User_Id。
我如何定义属性UserId在学生是关系的属性?
您要做的是有一个显式定义和映射的外键,它看起来像这样:
modelBuilder.Entity<ApplicationUser>()
.HasOptional(u => u.Student)
.WithRequired(s => s.User)
.HasForeignKey(u => u.UserId);
如果没有显式指定,那么将按照[{PropertyName}_Id]
您需要指示哪个外键与哪个导航属性对应:
public class Student : BaseEntity
{
public string UserId { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser User { get; set; }
public string CreatedById { get; set; }
[ForeignKey("CreatedById")]
public virtual ApplicationUser CreatedBy { get; set; }
}
https://msdn.microsoft.com/en-us/data/jj591583.aspx关系