3

我使用sqlmembership provider并创建了一些表。我需要它的user桌子。

我的应用程序有三种类型的用户teachersstudentsother users。所以我想了三张桌子给他们。

他们每个人都有一个username由会员提供者注册并保存在自己的表中。

现在我不知道如何使用实体框架来建立保存在成员资格表中的用户名之间的关系teachers或表。students

我想我可以在成员提供者创建的表和我的表之间添加一对一的关系,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 的注册操作中,我有这样的事情:

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 回答