0

カスタム MembershipProvider を使用して MVC 3 アプリケーションを取得したので、新しく登録されたユーザーをデータベースに保存します。私は既存のデータベースで Code First アプローチを使用しています (これにはエンティティ フレームワークのパワー ツールを使用しました)。テーブル User、Roles、UsersRoles を取得しました。私が得たテーブルのユーザー: UserID (PK) Username Password Email ...

テーブル Roles で RoleID (PK) Name Description を取得しました

テーブルUsersRolesで、UserID(複合PKとして設定)RoleID(複合PKとして設定)を取得しました

 public partial class User
 {
    public User()
    {
        this.Roles = new List<Role>();
    }

    public int UserID { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}

public partial class Role
{
    public Role()
    {
        this.Users = new List<User>();
    }
    public int RoleID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<User> Users { get; set; }
}


public class UserMap : EntityTypeConfiguration<User>
{
    public UserMap()
    {
        // Primary Key
        this.HasKey(t => t.UserID);

        // Properties
        this.Property(t => t.Username)
            .IsRequired()
            .HasMaxLength(20);

        this.Property(t => t.Password)
            .IsRequired()
            .HasMaxLength(50);

        this.Property(t => t.Email)
            .IsRequired()
            .HasMaxLength(100);



        // Table & Column Mappings
        this.ToTable("Users");
        this.Property(t => t.UserID).HasColumnName("UserID");
        this.Property(t => t.Username).HasColumnName("Username");
        this.Property(t => t.Password).HasColumnName("Password");
        this.Property(t => t.Email).HasColumnName("Email");

    }
}

public class RoleMap : EntityTypeConfiguration<Role>
{
    public RoleMap()
    {
        // Primary Key
        this.HasKey(t => t.RoleID);

        // Properties
        this.Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(20);

        this.Property(t => t.Description)
            .HasMaxLength(50);

        // Table & Column Mappings
        this.ToTable("Roles");
        this.Property(t => t.RoleID).HasColumnName("RoleID");
        this.Property(t => t.Name).HasColumnName("Name");
        this.Property(t => t.Description).HasColumnName("Description");

        // Relationships
        this.HasMany(t => t.Users)
            .WithMany(t => t.Roles)
            .Map(m =>
                {
                    m.ToTable("UsersRoles");
                    m.MapLeftKey("RoleID");
                    m.MapRightKey("UserID");
                });


    }
}

Roles テーブルに定義済みのロールがあり、新しいユーザーが登録したときにそれらを変更したくありません (Roles テーブルは管理者のみが変更する必要があります)。新しいユーザーを Users テーブルに保存し、通常のデフォルトのロールを割り当てたいです。ユーザー (特別な権限なし) であるため、Users テーブルにレコードを追加し、UsersRoles テーブルにレコードを追加します。

   public void AddUser(User user)
    {   
        Users.Add(user);
        SaveChanges();
   }

 var tmp = new User { Username = username, Password = GetMd5Hash(password), Email = email };


            using (var db = new mycontext())
            {
                mycontext.AddUser(userObj);
            }

しかし、新しいレコードを UsersRoles テーブルに追加する方法がわかりません.. UserID と RoleID (デフォルトのもの、最初のもの RoleID=1 - 通常のユーザー権限)。どんな助けでも大歓迎です。

4

1 に答える 1