表之间的关系

时间:2013-01-19 17:53:38

标签: c# asp.net asp.net-mvc entity-framework ef-code-first

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

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

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

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

我以为我可以在成员提供者创建的users表和我的表之后添加一对一的关系,然后通过逆向工程创建表来编写代码,但似乎不允许更改这些表。< / p>

有人可以告诉我如何在教师或学生之间建立用户名(我的意思是他们的会员信息)

更多详情:此处是代码优先表

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; }
}

1 个答案:

答案 0 :(得分: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,但应足以让您走上正确的轨道。