欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Microsoft EF 的简单应用

程序员文章站 2022-06-12 09:01:43
...

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

Microsoft EF 的简单应用

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

Microsoft EF 的简单应用

点击下一步

Microsoft EF 的简单应用

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

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

Microsoft EF 的简单应用

点击完成

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

Microsoft EF 的简单应用

选择 空EF设计器模型

Microsoft EF 的简单应用

点击完成

3 在打开的UserOrder.edmxw文件中

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

Microsoft EF 的简单应用

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

Microsoft EF 的简单应用

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

Microsoft EF 的简单应用

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

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

Microsoft EF 的简单应用

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

Microsoft EF 的简单应用

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