我使用带有Identity的ASP.NET Core并希望扩展默认的Db上下文。如果我想添加未链接的表,我只需添加一个新类:
public partial class Table1
{
public int Id { get; set; }
public string Txt { get; set; }
}
并扩展我的ApplicationDbContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public virtual DbSet<Table1> Table1 { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
builder.Entity<Table1>(entity =>
{
entity.ToTable("Table_1");
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Txt)
.IsRequired()
.HasMaxLength(50);
});
}
}
然后创建迁移并更新db。有用。但是,如果我想添加一个新表,该表链接到IdentityDbContext的表:
public partial class Users
{
public int Id { get; set; }
public string UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual AspNetUser User { get; set; }
}
当然,AspNetUser类不存在(它由IdentityDbContext创建,据我所知)。如何正确地做到这一点?
答案 0 :(得分:1)
该类很可能被命名为ApplicationUser
(默认值)。表示此实体的表是dbo.AspNetUsers
,但这是由Identity设置的,与类名无关。
Users
实体是一个坏主意,原因有很多:
毫无疑问,Users
和ApplicationUser
以及数据库表dbo.Users
和dbo.AspNetUsers
之间会产生混淆。
通常,您应该以单数形式命名实体,即User
,而不是Users
。这个约定有很多原因,但足以说明,它只是让你的代码更好,更易读,坚持奇异事物的单数时态和复数事物的复数时态。例如,ICollection<User>
类型的属性将被命名为Users
,因为它由许多User
个实例组成。
您所做的事情完全没必要。身份存在的全部原因是成员资格(ASP.NET采用的先前身份验证和授权框架)不允许您扩展所涉及的类型。身份会改变这一切,并且在各方面都是100%可扩展的。您可以完全访问框架中涉及的所有实体,您可以添加它们并从中派生。如果您想为&#34;用户添加其他属性&#34;在您的系统中,只需将它们直接添加到ApplicationUser
类。