表之间的关系

本文关键字:关系 之间 | 更新日期: 2023-09-27 17:54:41

我使用sqlmembership provider,这创建了一些表。我需要它的user

我的应用程序有三个类型的用户:teachers, studentsother users。所以我为他们想了三张桌子。

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

现在我不知道如何使用实体框架使teachersstudents表与保存在成员表中的用户名之间的关系

我认为我可以在成员提供者创建的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; }
}

表之间的关系

我遇到过一个类似的场景,我最后做的是创建一个从用户配置文件表到成员表的外键。例如,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可用的时刻,但应该足以让你走上正确的轨道。