【问题标题】:Relationship between tables表之间的关系
【发布时间】:2013-01-03 05:40:59
【问题描述】:

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

我的应用程序有三种类型的用户:teachersstudentsother 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; }
}

【问题讨论】:

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


    【解决方案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,但应该足以让您走上正轨。

    【讨论】:

    • 感谢@Will,所以这是一对一的关系?我们知道一个用户名应该属于一个人,这是否会阻止另一个表中的其他人(即学生)使用该用户名?
    • @Blazi:是的,这是一对一的关系。我在答案中添加了一个 sn-p,以确保用户名不能多次使用。
    • @Will 我会感到困惑吗,我一直在研究与此类似的模型,但我无法使用您的示例使其工作。据我了解,会员资格没有UserName,他们拥有的唯一类似列是UserIdRegisterModel 中不存在。那么如何实例化成员变量呢?我也尝试从UserProfile 中拉出foreign key,但它不起作用,因此尝试了这个。
    • @KomengeMwandila 使用您的模型,尝试从 CreateUserAndAccount 方法中获取返回的令牌并在 Membership 表 ConfirmationToken 列中搜索它。
    • @Will 有用,非常感谢,我已经坐了好几个星期了。如果可以的话,我会给你更多的 +1
    猜你喜欢
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多