Моделирование кода сначала с таблицами членства - PullRequest
3 голосов
/ 07 апреля 2011

Я хочу отслеживать дополнительную информацию о профиле пользователя в моей собственной таблице, а не в таблицах по умолчанию, установленных ASP.Net.Итак, как сделать внешний ключ, который отображается в поле aspnet_Users.UserId в моем классе UserInfoModel?

public class UserInfoModel
{

    [MaxLength(30)]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [MaxLength(50)]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
}

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Я сделал нечто подобное:

public class User
{
    [Key]
    public Guid UserId { get; set; }
    public string UserName { get; set; }
}

public class UserDetail
{
    [Key]
    public Guid UserId { get; set; }
    public string FullName { get; set; }
    public string CompanyName { get; set; }
}

public class UserMembership
{
    [Key]
    public Guid UserId { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public bool IsApproved { get; set; }
    public bool IsLockedOut { get; set; }
}

И вот конфигурации для этих таблиц:

public class UserConfig : EntityConfiguration<User>
{
    public UserConfig()
    {
        this.MapSingleType(user => new
        {
            UserId = user.UserId,
            UserName = user.UserName
        }).ToTable(new StoreTableName("aspnet_Users", "dbo"));
    }
}

public class UserDetailConfig : EntityConfiguration<UserDetail>
{
    public UserDetailConfig()
    {
        this.HasKey(u => u.UserId);
        this.MapSingleType(ud => new
        {
            UserId = ud.UserId,
            FullName = ud.FullName,
            CompanyName = ud.CompanyName
        }).ToTable(new StoreTableName("UserDetail", "dbo"));
    }
}

public class UserMembershipConfig : EntityConfiguration<UserMembership>
{
    public UserMembershipConfig()
    {
        this.HasKey(m => m.UserId);

        this.MapSingleType(membership => new
        {
            UserId = membership.UserId,
            Password = membership.Password,
            Email = membership.Email,
            IsApproved = membership.IsApproved,
            IsLockedOut = membership.IsLockedOut
        }).ToTable(new StoreTableName("aspnet_Membership", "dbo"));
    }
}

Контекст вашей базы данных:

public class TLI_FBA : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<UserDetail> UserDetails { get; set; }
    public DbSet<UserMembership> UserMemberships { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new UserConfig());
        modelBuilder.Configurations.Add(new UserDetailConfig());
        modelBuilder.Configurations.Add(new UserMembershipConfig());
    }
}
1 голос
/ 05 сентября 2011

Поместите это в контекст вашей модели.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        BuildAspNetEntities(modelBuilder);
        // put method here that builds your own entities
        base.OnModelCreating(modelBuilder);
    }

    private void BuildAspNetEntities(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Application>().HasKey(a => a.ApplicationId).ToTable("aspnet_Applications");

        modelBuilder.Entity<UserInfo>().HasKey(ui => ui.UserId).ToTable("aspnet_Users");
        modelBuilder.Entity<UserInfo>()
            .HasRequired(ui => ui.MembershipInfo)
            .WithRequiredDependent(mi => mi.UserInfo);
        modelBuilder.Entity<UserInfo>()
            .HasMany(u => u.Roles).WithMany(r => r.UserMemberships)
            .Map(u =>
                {
                    u.MapLeftKey("UserId");
                    u.MapRightKey("RoleId");
                    u.ToTable("aspnet_UsersInRoles");
                });

        modelBuilder.Entity<MembershipInfo>().HasKey(ui => ui.UserId).ToTable("aspnet_Membership");
        modelBuilder.Entity<MembershipInfo>().Property(mi => mi.Comment).IsMaxLength();

        modelBuilder.Entity<Path>()
            .HasKey(p => p.PathId)
            .ToTable("aspnet_Paths");

        modelBuilder.Entity<PersonalizationAllUser>()
            .HasKey(pau => pau.PathId)
            .ToTable("aspnet_PersonalizationAllUsers");
        modelBuilder.Entity<PersonalizationAllUser>()
            .HasRequired(pau => pau.Path).WithOptional(p => p.PersonalizationAllUser);

        modelBuilder.Entity<PersonalizationPerUser>()
            .HasKey(ppu => ppu.Id)
            .ToTable("aspnet_PersonalizationPerUser");

        modelBuilder.Entity<Profile>()
            .HasKey(p => p.UserId)
            .ToTable("aspnet_Profile");
        modelBuilder.Entity<Profile>()
            .HasRequired(p => p.User).WithOptional(u => u.Profile);

        modelBuilder.Entity<Role>()
            .HasKey(r => r.RoleId)
            .ToTable("aspnet_Roles");

        modelBuilder.Entity<SchemaVersion>()
            .HasKey(sv => new { sv.Feature, sv.CompatibleSchemaVersion })
            .ToTable("aspnet_SchemaVersions");
        modelBuilder.Entity<WebEvent_Event>()
            .HasKey(we => we.EventId)
            .ToTable("aspnet_WebEvent_Events");
    }
...