[英]IdentityDbContext User DbSet Name
我創建了一個從IdentityUser繼承的自定義用戶,稱為Contacts,而我的應用程序dbcontext則從IdentityDbContext繼承,如下所示:
public class Contact : IdentityUser<int, ContactLogin, ContactRole, ContactClaim>
{
public Contact()
{
}
}
public class dbcontext : IdentityDbContext<Contact, Role, int, ContactLogin, ContactRole, ContactClaim>
{
public dbcontext()
: base("dbcontext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// IdentityDbContext base - must be called prior to changing identity configuration
base.OnModelCreating(modelBuilder);
// custom identity table names and primary key column Id names
modelBuilder.Entity<Contact>().ToTable("Contacts").Property(p => p.Id).HasColumnName("ContactId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<ContactRole>().ToTable("ContactRoles");
modelBuilder.Entity<ContactLogin>().ToTable("ContactLogins");
modelBuilder.Entity<ContactClaim>().ToTable("ContactClaims").Property(p => p.Id).HasColumnName("ContactClaimId");
modelBuilder.Entity<Role>().ToTable("Roles").Property(p => p.Id).HasColumnName("RoleId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
默認情況下,IdentityDbContext包含一個用戶DbSet。 是否可以更改此DbSet的名稱以匹配其實現的類型,例如“聯系人”?
沒什么大不了的,但是使用dbcontext.Contacts而不是dbcontext.Users引用DbSet會很好。
謝謝。
基本IdentityDbContext
使用: public virtual IDbSet<TUser> Users { get; set; }
public virtual IDbSet<TUser> Users { get; set; }
public virtual IDbSet<TUser> Users { get; set; }
以暴露用戶DbSet。
您需要為自己的實現使用類似的屬性,例如: public IDbSet<Contacts> Contacts { get; set; }
public IDbSet<Contacts> Contacts { get; set; }
問題是有關將現有的DbSet聯系人從用戶重命名為Contacts。
不,您不能開箱即用。 您可以嘗試將其包裝並再次公開,但這並不是正確的選擇。 請參閱此問題進行深入討論 。
請注意,如果您決定覆蓋任何內容或添加自己的內容,則UserStore
的默認EF實現將使用名為Users的DbSet。 如果發生意外行為,請注意。
通常,我傾向於做的是將關注點分離得很大。
所以我有:
public IDbSet<User> Users { get; set; }
這代表任何想要登錄我的系統的人。 因此,現在我想將實際概念建模到我的數據庫中,這些概念與現實世界中的事物相關。 例如,我有一個系統管理員,我將為此創建一個實體。
public class SystemAdministrator
{
public string Name { get; set; }
public int LocationId { get; set; } // a complex representation of where this administrator works from
public int UserId { get; set; } // this is now a reference to their log in
}
現在我的上下文將如下所示:
public IDbSet<User> Users { get; set; }
public DbSet<SystemAdministrator> SystemAdministrators { get; set; } // I use DbSet because it exposes more methods to use like AddRange.
這意味着現在我的數據庫可以正確代表現實世界的概念,每個人都可以輕松地進行開發。 我對Clients
或Employees
。
這也意味着我可以擺脫原始的迷戀
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.