将两个表绑定在一起(一对多关系)
本文关键字:在一起 关系 绑定 一对多 两个 | 更新日期: 2023-09-27 18:10:34
我对c#, EF Code First和所有这些都很陌生,所以我的问题可能很简单。
我正在尝试创建一个非常简单的登录。每个用户必须有一个类型(admin或client)。如何将用户类型绑定到用户表,而不必在每次向DB插入新用户时生成新类型?下面是我的代码:
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必须包含2种类型(Admin和Client)。
然后,每次我注册一个新用户,所以每次我向Users表添加一个用户,我希望能够使用UserTypes表
当我启动应用程序时,我希望能够创建2个表…
不确定我是否正确理解这一点,但你可以种子初始数据到数据库与EF Code-First。下面是一个示例:
实体框架在重建时插入初始数据
如果您真的想在每次启动应用程序时重新创建表,您可以使用示例中提到的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
不重复,即没有INSERT命令将被发送到UserType
的数据库。
使用新版本的EF(目前超过了官方4.1版本:实体框架2011年6月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,
}
数据将在数据库中保存为整数,但在应用程序中,您可以像这样使用enum:
var newUser = new User { Type = UserType.Admin, Username = ... };
context.Users.Add(newUser);
context.SaveChanges();