簡體   English   中英

IdentityDbContext用戶DbSet名稱

[英]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.

這意味着現在我的數據庫可以正確代表現實世界的概念,每個人都可以輕松地進行開發。 我對ClientsEmployees

這也意味着我可以擺脫原始的迷戀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM