2013-01-19 38 views
3

我使用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; } 
} 

回答

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可在時刻,但應該足以讓你在正確的軌道上。

+0

謝謝@威爾,所以這是一對一的關係?我們知道一個用戶名應該屬於一個人,這是否會阻止另一個表中的其他人使用該用戶名(即學生)? – Blazi

+0

@Blazi:是的,這是一對一的關係。我爲答案添加了一段代碼,以確保用戶名不能多次使用。 – Will

+0

@我很困惑,我一直在研究類似的模型,但我無法使用你的例子使它工作。據我所知,會員沒有'UserName',他們唯一的相似的列是'UserId',它不存在於'RegisterModel'中。那麼如何實例化成員變量呢?我也嘗試從'UserProfile'中拉'外鍵',因此無法正常工作。 – Komengem