Microsoft EF 的简单应用

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,点击添加,

284679-20171014145407105-250306437.png

选择 来自数据库的EF设计器

284679-20171014145427652-1285276788.png

点击下一步

284679-20171014145436746-1505056279.png

在上图中选择新建连接,并勾选 将App.Config中的连接设置另存为

在下一步,选择要生成模型的对象,这里选择表即可

284679-20171014145442762-928420720.png

点击完成

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,点击添加,

284679-20171014145407105-250306437.png

选择 空EF设计器模型

284679-20171014145520949-536404511.png

点击完成

3 在打开的UserOrder.edmxw文件中

3.1 右键-->新增-->实体

284679-20171014145540246-1947157930.png

3.2 打开图8所示窗体,按图设置完成后,点击确定

284679-20171014145544605-345301571.png

3.3 按照下图的步骤添加属性

284679-20171014145602543-203655098.png

3.4 重复以上的步骤,新建Order实体

3.5 右键-->新增-->关联,新建两表之间的关系

284679-20171014145613621-215336939.png

3.6 右键-->根据模型生成数据库

284679-20171014145622246-1431664504.png

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的三种模式,仅做参考,如有错误,欢迎指正

转载于:https://www.cnblogs.com/ShuiMu/articles/EF.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值