2011-10-05 65 views
3

我對c#,EF Code First等都很陌生,所以我的問題可能很簡單。綁定2個表格(一對多關係)

我想創建一個非常簡單的登錄。每個用戶必須有一個類型(管理員或客戶端)。如何在每次向數據庫中插入新用戶時將用戶類型綁定到用戶表而不生成新類型? 這裏是我的代碼一流:

public class User 
{ 
    public int Id { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool Active { get; set; } 
    public UserType TypeId { get; set; } 
} 

public class UserType 
{ 
    public int Id { get; set; } 
    public string Type { get; set; } 
} 

public enum TypeEnum 
{ 
    Admin, 
    Client 
} 

當我啓動的應用程序,我希望能夠創建2個表:

  • 用戶裏面是空的
  • 它必須含有2種
  • UserTypes (管理員和客戶端)。

然後,每次我註冊一個新用戶,所以每次向Users表中添加一個用戶時,我都希望能夠使用UserTypes表。

回答

2

當我啓動的應用程序,我希望能夠創建2個表...

不知道如果我正確地理解這一點,但你可以種子初始數據與EF數據庫代碼優先。一個例子是如何做到這一點是在這裏:

Entity Framework Inserting Initial Data On Rebuild

如果你真的想重新創建每次啓動您的應用程序可以使用DropCreateDatabaseAlways<T>初始化如本例中提到的表。

接着,每次我註冊一個新用戶,所以每次我將用戶添加到 用戶表,我希望能夠使用UserTypes表。

爲此,您將加載現有UserType你想從數據庫中分配,使其連接到上下文,然後創建新的用戶:

using (var context = new MyContext()) 
{ 
    var userType = context.UserTypes 
     .Single(u => u.Type == TypeEnum.Admin.ToString()); 
    var newUser = new User { TypeId = userType, Username = ... etc. }; 

    context.Users.Add(newUser); 

    context.SaveChanges(); 
} 

附加到上下文 - 通過任一從數據庫加載或明確呼叫Attach - 確保UserType不重複,即不會向UserType的數據庫發送INSERT命令。

2

隨着EF(目前超出了官方4.1版本:Entity Framework June 2011 CTP)的新版本,你也可以這樣做:

public class User 
{ 
    public int Id { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool Active { get; set; } 
    public UserType Type { get; set; } 
} 

public enum UserType 
{ 
    Admin = 1, 
    Client = 2, 
} 

的數據將在數據庫中保存爲整數,但你的應用程序中,你可以用你的枚舉像這樣:

var newUser = new User { Type = UserType.Admin, Username = ... }; 

    context.Users.Add(newUser); 

    context.SaveChanges(); 
+0

好主意!我自由地向你的問題添加了「新版本」的意思。 – Slauma

+0

感謝編輯,忘記了它是哪個版本。 – Mike