Entity Framework Core

一直用的是PetaPoco这类轻量级的ORM,现在想上.NET Core / Standard平台,研究一下适合的ORM,目前PetaPoco还不支持,Dapper支持.NETStandard了。

 

先回顾一下Linq的一些操作,

// 查询单条
entity.proj.Where(m => m.proj_id == projID && m.is_delete == false).FirstOrDefault();

// 查询多条记录
entity.proj.Where(m => m.is_delete == false).OrderBy(m => m.proj_id).ToList();

// 排序
entity.proj.Where(m => m.is_delete == false && m.battery_type_id == battery_type_id).OrderBy(m => m.proj_id).ToList();

(from ur in entity.tray
join r in entity.line on ur.line_id equals r.line_id
where ur.line_id == lineID
select ur).ToList();

 

 entity.Database.ExecuteSqlCommand(@"DELETE FROM ops WHERE ops_id=" + opsInfo.ops_id);

 

支持MySQL的EF框架有MySQL官方的MySql.Data.EntityFrameworkCore,第三方的Pomelo.EntityFrameworkCore.MySql,用法都基本一样的。定义实体,定义一个DataContext,然后直接调用了。不管那个,Microsoft.EntityFrameworkCore是必须要引用的。

实体如果是DB First,可以自动生成,生成需要用到工具Microsoft.EntityFrameworkCore.Tools,安装这个NuGet包即可,使用方法敲NuGet命令。

Entity Framework Core Tools for the NuGet Package Manager Console in Visual Studio.

Enables these commonly used commands:
Add-Migration
Drop-Database
Get-DbContext
Scaffold-DbContext
Script-Migrations
Update-Database
# 从数据库生成实体类
Scaffold-DbContext "Server=localhost;database=ef;uid=root;pwd=123456;Port=3307;Ssl Mode=0" Pomelo.EntityFrameworkCore.MySql -OutputDir LimsModels

生成的实体命名有大小写问题 ,都是骆驼命名,但数据库里是小写,且下划线也没了,这个问题。user_name变成UserName

 

调用 使用方法

using (var context = new LimsModels.efContext())
            {
                //Creates the database if not exists
                context.Database.EnsureCreated();

                //var user = new User { Name = "Jack Cai" };
                //context.Users.Add(user);


                //var user = new User { UserId = 1, Name = "Jack Cai 222" };
                //context.Users.Update(user);

                //var user = new User {UserId=2, Name = "Jack Cai" };
                //context.Users.Remove(user);

                //context.SaveChanges();

                //foreach (var u in context.Users)
                //{
                //    Console.WriteLine(u.Name);
                //}

                //引用 Microsoft.EntityFrameworkCore
                context.Users.Include();

                //引用 Linq命令空间
                var lst = context.Users.Where(r => r.UserId == 1).Take(1).ToList();
                foreach (var u in lst)
                {
                    Console.WriteLine(u.Name);
                }
                Console.Read();
            }

 

posted @ 2018-08-02 14:17  chy710  阅读(63)  评论(0)    收藏  举报