将2个表绑定在一起(一对多关系)

时间:2011-10-05 14:59:58

标签: c# .net entity-framework ef-code-first one-to-many

我是c#,EF Code First等新手,所以我的问题可能很简单。

我正在尝试创建一个非常简单的登录。每个用户必须具有类型(管理员或客户端)。每次在数据库中插入新用户时,如何将usertype绑定到我的用户表而不生成新类型? 这是我的代码第一类:

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个表:

  • 空的用户
  • UserTypes,必须包含2种类型(管理员和客户端)。

然后,每次我注册一个新用户,所以每次我将用户添加到Users表时,我希望能够使用UserTypes表。

2 个答案:

答案 0 :(得分:2)

  

当我启动应用程序时,我希望能够创建2个表...

不确定我是否正确理解了这一点,但您可以使用EF Code-First 初始数据种植到数据库中。这方面的一个例子如下:

Entity Framework Inserting Initial Data On Rebuild

如果您真的想在每次启动应用程序时重新创建表格,可以使用示例中提到的DropCreateDatabaseAlways<T>初始化程序。

  

然后,每次我注册一个新用户,所以每次我添加一个用户   在Users表中,我希望能够使用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不重复,即不会向{{{}发送任何INSERT命令到数据库1}}。

答案 1 :(得分: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();