EF的简单应用
EF支持三种构建方法,分别为:Code First模式,Database First模式和Model First模式,下面通过代码简单的介绍这三张方法的使用
一 Code First 模式.顾名思义就是代码先行
1 新建一个控制台程序(这个不多说),并新添加Entities和DBContext文件夹,分别存放模型和数据库上下文类,通过Nuget添加Entity Framework包
2 新建User类和Order类 如下
public class User
{
[Key]
public string Id { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
[Key]
public string Id { get; set; }
public System.DateTime OrderTime { get; set; }
public string UserId { get; set; }
public User UserInfo { get; set; }
}
3 在新建一个CodeFirstDbContext类型,继承自DbContext
public class CodeFirstDbContext : DbContext
{
public CodeFirstDbContext()
: base("name=CodeFirstDbContext") //此处可不配配置连接串,EF会自动创建数据库,如果配置了连接串,则EF会根据连接串在相应的服务器创建相应的数据库
{
}
public DbSet<User> User { get; set; }
public DbSet<Order> Order { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//添加下面一句可以让生成的表名不为类型的复数
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
}
4 至此,数据库相关的开发完成,下面通过代码验证是否有误,在main方法中添加一下代码
User u = new User { Id = Guid.NewGuid().ToString("N").ToUpper(), Name = "Hello", Birthday = DateTime.Now.AddYears(-20) };
Order o = new Order { Id = Guid.NewGuid().ToString("N").ToUpper(), OrderTime = DateTime.Now, UserId = u.Id };
//写入数据
using (CodeFirstDbContext db = new CodeFirstDbContext())
{
db.User.Add(u);
db.Order.Add(o);
db.SaveChanges();
}
//读取数据
using (CodeFirstDbContext db = new CodeFirstDbContext())
{
foreach (User dbUser in db.User)
{
Console.WriteLine($"Id:{dbUser.Id} Name:{dbUser.Name}");
}
foreach (Order dbOrder in db.Order)
{
Console.WriteLine($"Id:{dbOrder.Id} Name:{dbOrder.UserId}");
}
}
Console.ReadKey();
结果:数据写入并查询,此时.可在相应的服务器上查看创建的数据库和表中的数据
二 Database First模式,即数据库先行
1 新建一个控制台程序(这个不多说),并新添加Entities和DBContext文件夹,分别存放模型和数据库上下文类,通过Nuget添加Entity Framework包
2 新建数据库及表(可以使用上例中生成的数据库,也可以自己新建)
3 新建一个DB文件夹,在该文件下右键-->添加-->新建项,选择ADO.NET实体数据模型,命名为UserOrder,点击添加,
选择 来自数据库的EF设计器
点击下一步
在上图中选择新建连接,并勾选 将App.Config中的连接设置另存为
在下一步,选择要生成模型的对象,这里选择表即可
点击完成
4 此时项目结构如图5
5 在Main方法中,添加如下代码,然后运行,就可以看到上例子中添加的数据了
using (ModelFirstEntities db = new ModelFirstEntities())
{
foreach (User dbUser in db.Users)
{
Console.WriteLine($"Id:{dbUser.Id} Name:{dbUser.Name}");
}
foreach (Order dbOrder in db.Orders)
{
Console.WriteLine($"Id:{dbOrder.Id} Name:{dbOrder.UserId}");
}
}
Console.ReadKey();
三 Model First模式,即模型先行
1 同样的,新建一个控制台程序,通过Nuget添加Entity Framework包
2 新建一个DB文件夹,在该文件下右键-->添加-->新建项,选择ADO.NET实体数据模型,命名为UserOrder,点击添加,
选择 空EF设计器模型
点击完成
3 在打开的UserOrder.edmxw文件中
3.1 右键-->新增-->实体
3.2 打开图8所示窗体,按图设置完成后,点击确定
3.3 按照下图的步骤添加属性
3.4 重复以上的步骤,新建Order实体
3.5 右键-->新增-->关联,新建两表之间的关系
3.6 右键-->根据模型生成数据库
3.7 点击下一步,选择EF版本
3.8 点击下一步,会生成相应的sql语句,点击完成,系统会自动打开新创建的sql语句
3.9 右键打开的sql语句文件,选择执行(此时可能需要连接数据库),完成后会生成相应的数据库和表
4 在Main方法中添加如下代码
User u = new User { Id = Guid.NewGuid().ToString("N").ToUpper(), Name = "Hello" };
Order o = new Order { Id = Guid.NewGuid().ToString("N").ToUpper(), Remark = "remark", UserId = u.Id };
//写入数据
using (UserOrderContainer db = new UserOrderContainer())
{
db.Users.Add(u);
db.Orders.Add(o);
db.SaveChanges();
}
//读取数据
using (UserOrderContainer db = new UserOrderContainer())
{
foreach (User dbUser in db.Users)
{
Console.WriteLine($"Id:{dbUser.Id} Name:{dbUser.Name}");
}
foreach (Order dbOrder in db.Orders)
{
Console.WriteLine($"Id:{dbOrder.Id} Name:{dbOrder.UserId}");
}
}
Console.ReadKey();
运行程序,没有其他错误的话会有相应的数据,并且数据库中也会有相应的数据
以上内容简单的描述了EF的三种模式,仅做参考,如有错误,欢迎指正