3

私は使用sqlmembership providerし、いくつかのテーブルを作成します。そのuserテーブルが必要です。

teachers私のアプリケーションには、 、 、studentsの3 種類のユーザーがいますother users。それで、私は彼らのために3つのテーブルを考えました。

それらのそれぞれには、usernameメンバーシップ プロバイダーによって登録され、独自のテーブルに保存される があります。

エンティティフレームワークを使用して、メンバーシップのテーブルに保存されているユーザー名とテーブルteachersの間の関係を作成する方法がわかりません。students

メンバーシップ プロバイダーによって作成されたテーブルと自分のテーブルの間に 1 対 1 の関係を追加できると思ったのですがusers、最初にそれによって作成されたテーブルをリバース エンジニアリングしてコードを作成しましたが、それらのテーブルを変更することは許可されていないようです。

教師や生徒とユーザー名(メンバーシップ情報) を関連付ける方法を教えてもらえますか?

詳細: コードファーストの表はこちら

public class aspnet_Users
{
    public aspnet_Users()
    {
        this.aspnet_PersonalizationPerUser = new List<aspnet_PersonalizationPerUser>();
        this.aspnet_Roles = new List<aspnet_Roles>();
    }

    public System.Guid ApplicationId { get; set; }
    public System.Guid UserId { get; set; }
    public string UserName { get; set; }
    public string LoweredUserName { get; set; }
    public string MobileAlias { get; set; }
    public bool IsAnonymous { get; set; }
    public System.DateTime LastActivityDate { get; set; }
    public virtual aspnet_Applications aspnet_Applications { get; set; }
    public virtual aspnet_Membership aspnet_Membership { get; set; }
    public virtual ICollection<aspnet_PersonalizationPerUser> aspnet_PersonalizationPerUser { get; set; }
    public virtual aspnet_Profile aspnet_Profile { get; set; }
    public virtual ICollection<aspnet_Roles> aspnet_Roles { get; set; }
}

public class Techer
{
    [Key]
    public int TeacherId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string NationalNumber { get; set; }
    public string PhoneNumber { get; set; }
    public string Description { get; set; }
    public int OfficeId { get; set; }
    public virtual Office Office { get; set; }
}

public class Student
{
    public int StudentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int OfficeId { get; set; }
    public virtual Office Office { get; set; }
}
4

1 に答える 1

1

同様のシナリオに遭遇しましたが、最終的には、ユーザープロファイルテーブルからメンバーシップテーブルへの外部キーを作成しました。したがって、たとえば、TeacherテーブルにはMembershipIdという列があり、メンバーシップテーブルのId列への外部キーになります。次に、AccountControllerのRegisterアクションに、次のようなものがあります。

if (db.Memberships.Any(x => x.UserName == model.UserName) 
{
    // handle error here
    // return view with error message "user name already in use"
}

var token = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, true);
var membership = db.Memberships.SingleOrDefault(x => x.UserName == model.UserName);
if (membership != null) 
{
    var newProfile = new Teacher
    {
        Membership = membership
        // add other properties here if required
    }
    db.Teachers.Add(newProfile);
    db.SaveChanges();
}

*現在VSを利用できないため、このコードはテストされていませんが、正しい軌道に乗るには十分なはずです。

于 2013-01-19T18:18:56.453 に答える