我是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个表:
然后,每次我注册一个新用户,所以每次我将用户添加到Users表时,我希望能够使用UserTypes表。
答案 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();