[英]I want to add AspNetUsers table "Id" column as Foreign Key in another table
ApplicationDbContext.cs
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<Hospital> Hospitals { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
}
}
医院.cs
public class Hospital : Common
{
[Key]
[Column(Order = 1)]
public int HospitalId { get; set; }
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Invalid e-mail address.")]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[Display(Name = "Contact Person")]
public string ContactPerson { get; set; }
[Required]
[Display(Name = "Phone Number")]
[DataType(DataType.PhoneNumber)]
public string PhoneNum { get; set; }
[Required]
[MinLength(10)]
[Display(Name = "Mobile Number")]
public string MobileNum { get; set; }
[Required]
[Display(Name = "Address")]
public string Address { get; set; }
[Required]
[Display(Name = "Short Name")]
public string ShortName { get; set; } //Unique Slug name
}
Common.cs
public class Common
{
public DateTime? CreatedOn { get; set; }
public string CreatedBy { get; set; }
public DateTime? EditedOn { get; set; }
public string EditedBy { get; set; }
public DateTime? DeletedOn { get; set; }
public string DeletedBy { get; set; }
public bool? IsDeleted { get; set; } = false;
public bool? IsActive { get; set; } = true;
}
我想将Hospital表中AspNetUsers表的主键添加为具有这些列的外键:
由...制作
编辑者
删除者
主要目标:所以使用这种关系,我想显示带有医院详细信息的用户名,即创建/编辑/删除医院详细信息。
使用数据注释配置关系:在医院 class 添加以下属性:
public int AspNetUsersId{ get; set; }
[ForeignKey("AspNetUsersId")]
public virtual Common aspNetUser { get; set; }
在 Common class 中添加医院属性:
public virtual Hospital hospital { get; set; }
现在,您应该在 ApplicationDvContext 中定义此关系:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Hospital>()
.HasOptional(s => s.aspNetUser)
.WithRequiredPrincipal(ad => ad.hospital);
}
我不建议在两个表之间超过一个关系。 我认为,这些列没有必要建立关系。 Bcs这些colums只是信息coll。 但是您仍然可以像这样编辑常见的 class 。
public class Common
{
public DateTime? CreatedOn { get; set; }
[ForeignKey("AspNetUsers")] public string CreatedBy { get; set; }
public AspNetUsers CreatedByUser { get; set; }
public DateTime? EditedOn { get; set; }
[ForeignKey("AspNetUsers")] public string EditedBy { get; set; }
public AspNetUsers EditedByUser { get; set; }
public DateTime? DeletedOn { get; set; }
[ForeignKey("AspNetUsers")] public string DeletedBy { get; set; }
public AspNetUsers DeletedByUser { get; set; }
public bool? IsDeleted { get; set; } = false;
public bool? IsActive { get; set; } = true;
}
您应该使用您想要的键关系从管理程序配置您的数据库,然后从您的解决方案更新实体数据 model,否则实体将无法自行找到关系。 如果您使用的是微软 sql 管理工作室,请查看这篇文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.