介绍

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。

Entity Framework Core 可通过名为数据库提供程序的插件库访问许多不同的数据库。

NuGet 程序包支持的数据库引擎维护商/供应商备注/要求专为版本构建有用的链接
Microsoft.EntityFrameworkCore.SqlServerSQL Server 2012 以上版本EF Core 项目(Microsoft)3.1docs
Microsoft.EntityFrameworkCore.SqliteSQLite 3.7 及以上版本EF Core 项目(Microsoft)3.1docs
Microsoft.EntityFrameworkCore.InMemoryEF Core 内存中数据库EF Core 项目(Microsoft)限制3.1docs
Microsoft.EntityFrameworkCore.CosmosAzure Cosmos DB SQL APIEF Core 项目(Microsoft)3.1docs
Npgsql.EntityFrameworkCore.PostgreSQLpostgresqlNpgsql 开发团队3.1docs
Pomelo.EntityFrameworkCore.MySqlMySQL、MariaDBPomelo Foundation 项目3.1自述文件
Devart.Data.MySql.EFCoreMySQL 5 及以上版本DevArt已付3.0docs
Devart.Data.Oracle.EFCoreOracle DB 9.2.0.4 及更高版本DevArt已付3.0docs
Devart.Data.PostgreSql.EFCorePostgreSQL 8.0 及以上版本DevArt已付3.0docs
Devart.Data.SQLite.EFCoreSQLite 3 及以上版本DevArt已付3.0docs
FileContextCore在文件中存储数据Morris Janatzek用于开发3.0自述文件
EntityFrameworkCore.JetMicrosoft Access 文件Bubi.NET Framework2.2自述文件
EntityFrameworkCore.SqlServerCompact35SQL Server Compact 3.5Erik Ejlskov Jensen.NET Framework2.2wiki
EntityFrameworkCore.SqlServerCompact40SQL Server Compact 4.0Erik Ejlskov Jensen.NET Framework2.2wiki
FirebirdSql.EntityFrameworkCore.FirebirdFirebird 2.5 和 3.xJiří Činčura2.2docs
Teradata.EntityFrameworkCoreTeradata 数据库 16.10 及更高版本Teradata预发行2.2网站
EntityFrameworkCore.FirebirdSqlFirebird 2.5 和 3.xRafael Almeida2.1wiki
EntityFrameworkCore.OpenEdgeProgress OpenEdgeAlex Wiese2.1自述文件
MySql.Data.EntityFrameworkCoreMySQLMySQL 项目(Oracle)2.1docs
Oracle.EntityFrameworkCoreOracle DB 11.2 及更高版本Oracle2.1网站
IBM.EntityFrameworkCoreDb2、InformixIBMWindows 版本2.0博客
IBM.EntityFrameworkCore-lnxDb2、InformixIBMLinux 版本2.0博客
IBM.EntityFrameworkCore-osxDb2、InformixIBMmacOS 版本2.0博客
Pomelo.EntityFrameworkCore.MyCatMyCAT 服务器Pomelo Foundation 项目仅预发行版1.1

对于 EF Core,使用模型执行数据访问。 模型由实体类和表示数据库会话的上下文对象构成,可便于用户查询和保存数据。

可以根据现有数据库生成模型,手动将模型编码为与数据库匹配,也可以使用 EF 迁移根据模型创建数据库,然后在模型随时间推移发生更改时改进它。

也就是 可以通过实体类映射成数据库的表,也可以反过来通过数据库映射为实体类。同事 可以后期调整类或者数据库来同步调整数据库或者类。

下面我们 使用mysql数据库来搭建一个例子项目

使用VS2017+ 创建一个.NET CORE控制台程序

明白了,你要的是:代码块之间的文字保留原样,代码放进代码块里,一个字不改。


NUGET安装 MySql.Data.EntityFrameworkCore

创建表、

DROP TABLE IF EXISTS `blogs`;
CREATE TABLE `blogs` (
  `BlogId` int(11) NOT NULL AUTO_INCREMENT,
  `Url` varchar(255) DEFAULT NULL,
  `Rating` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`BlogId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


DROP TABLE IF EXISTS `posts`;
CREATE TABLE `posts` (
  `PostId` int(11) NOT NULL AUTO_INCREMENT,
  `Title` varchar(255) DEFAULT NULL,
  `Content` varchar(255) DEFAULT NULL,
  `BlogId` int(11) DEFAULT NULL,
  PRIMARY KEY (`PostId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;Code language: PHP (php)

执行数据库

class Program
    {
        static void Main(string[] args)
        {
            using (var db = new BloggingContext())
            {
                var blog = new Blog { Url = "http://bamn.cn", Rating = 9 };
                db.Blogs.Add(blog);
                db.SaveChanges();

                var blog = db.Blogs.Include(blog => blog.Posts)
                    .Where(b => b.Rating > 3)
                    .OrderBy(b => b.Url)
                    .first(m=>m.blogid = 1);
                    
                        foreach(var item in blog.posts){
                            
                        }
            }
        }
    }

    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL(
                @"server=localhost;Database=web;Uid=root;Pwd=123456");
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
        public int Rating { get; set; }
        public List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public int BlogId { get; set; }
        public Blog Blog { get; set; }
         public Author Author { get; set; }
    }
    
    public class Author
    {
        public Photo Photo{ get; set; }
    }
    
    public class Photo
    {
        
    }Code language: HTML, XML (xml)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注