Если вы просто хотите добавить больше полей в свой IdentityUser, то вы можете просто расширить его с помощью класса.
Например, создать новый класс:
public class ApplicationUser : IdentityUser{
public string FullName { get; set;}
}
Когда вы примените миграции к своей базе данных, вы увидите, что будет дополнительный столбец, который FullName .
Вы не должны воссоздатьсвойства, которые уже хранятся в вашей существующей таблице AspNetUsers (например: Id, Email, имя пользователя и т. д.). Потому что это не восстановит всю вашу таблицу, а просто добавит новые столбцы в таблицу AspNetUsers.
Но есть другой подход, и эта часть, я думаю, важна.
Предположим, что у вас есть Product.cs
:
public class Product {
public int Id { get; set;}
public string ProductNo { get; set; }
public string ProductName { get; set;}
}
ивы уже используете DbContext
для применения ваших миграций в отношении вашей модели продукта.
Возможно DbContext.cs
будет:
public class DataContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=YourServer; Database=DbName; integrated security=true;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//This can be used.
}
public DbSet<Product> Products { get; set; }
}
И в целом вашDataContext
для вашего ApplicationUser
будет выглядеть так:
public class ApplicationIdentityDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationIdentityDbContext(DbContextOptions<ApplicationIdentityDbContext> options) : base(options){}
}
Это какреализовать способ создания контекстов данных. Но когда вы хотите определить отношение с этими двумя таблицами (Products и AspNetUsers), это может быть отношение, в котором все пользователей имеют свои собственные Product
, тогда высока вероятность того, что вы получитеошибка или вы не сможете контролировать 2 разных DataContexts.
Итак, для избежания такого рода борьбы лучше использовать только 1 Data Context, и он должен выглядеть следующим образом:
public class DataContext: IdentityDbContext<ApplicationUser>
{
public DataContext(DbContextOptions<DataContext> options)
: base(options)
{
}
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
Теперь вы можете просто определить ForeignKeys между вашими ApplicationUser
и Product
.
Например:
public class ApplicationUser: IdentityUser{
public string FullName { get; set; }
public int? ProductId { get; set; }
public Product Product { get; set; }
}