表之间的关系
本文关键字:关系 之间 | 更新日期: 2023-09-27 17:54:41
我使用sqlmembership provider
,这创建了一些表。我需要它的user
表
我的应用程序有三个类型的用户:teachers
, students
和other 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; }
}
我遇到过一个类似的场景,我最后做的是创建一个从用户配置文件表到成员表的外键。例如,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可用的时刻,但应该足以让你走上正确的轨道。