繁体   English   中英

我想在另一个表中添加 AspNetUsers 表“Id”列作为外键

[英]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表的主键添加为具有这些列的外键

  1. 由...制作

  2. 编辑者

  3. 删除者

主要目标:所以使用这种关系,我想显示带有医院详细信息的用户名,即创建/编辑/删除医院详细信息。

使用数据注释配置关系:在医院 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM