Loading

国产数据库神舟通用使用 EFCore 增删改查 (官方提供程序)

目前 Nuget 包还在 预览阶段 欢迎大家在使用的过程中发现问题, 可以随时反馈给我或者神舟通用有限公司

下面简单介绍使用方式和案例

使用说明

1.安装 Oscar EFCore提供程序包

Visual Studio

  • 通过 NuGet 包管理器添加
    打开 NuGet 包管理器,在 浏览器 选项的搜索框中输入 ShenTong.EntityFrameworkCore.Oscar 并勾选 包括预发行版,搜索并安装。 当前最新 1.0.8。

  • 通过程序包管理器控制台安装

PM> Install-Package ShenTong.EntityFrameworkCore.Oscar

Visual Code

PS> cd mydir
PS> dotnet add package ShenTong.EntityFrameworkCore.Oscar

2. 使用提供提供程序

下面提供两个简单的使用示例

数据库表

CREATE SCHEMA DEMO;
CREATE TABLE DEMO.USERS (Id INT AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(64) NOT NULL,Age INT,BirthDate TIMESTAMP);
INSERT INTO DEMO.USERS (Name,Age,BirthDate) VALUES ('user1',20,'1991.07.18'),('user2',19,'1992.07.18');
SELECT * FROM DEMO.USERS;

ID	NAME	AGE	BIRTHDATE
1	user1	20	1991-07-18 00:00:00.000
2	user2	19	1992-07-18 00:00:00.000

一个简单的数据模型

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime BirthDate { get; set; }
}

创建MyDbContext
using Microsoft.EntityFrameworkCore;

    public class MyDbContext : DbContext
    {
        public MyDbContext() { }
        public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
        {
        }

        public DbSet<User> Users { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseOscar("Server=ip;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;");

            // optionsBuilder.UseOscar(Constants.ConnectStrings, ops => { 
            //     ops.UseDefaultSchema("DEMO"); // 允许配置默认的Schema ,等效与 OnModelCreating 方法中的modelBuilder.HasDefaultSchema()
            //     ops.UseCaseSensitive(); //配置大小写敏感,默认 false, 当使用该方法 UseCaseSensitive() 大小写敏感为真.
            //     // 允许传递一个bool参数, true 大小写敏感,false 不区分大小写
            // });
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            
            //modelBuilder.HasDefaultSchema("DEMO"); //设置默认Schema,可用 HasDefaultSchema("schemaname") 在配置选项中替换

            modelBuilder.Entity<User>(b =>
            {
                b.ToTable("Users");
                //b.ToTable("Users","DEMO"); //如果有 Schema
                b.HasKey(u => u.Id);
                b.Property(u => u.Id).ValueGeneratedOnAdd();
                b.Property(u => u.Name).HasMaxLength(64).IsRequired();

            });
        }
    }

在 Console 中试用

        static async Task Main(string[] args)
        {
            // 1
            using (var dbContext = new MyDbContext())
            {
                // query
                var userssync = dbContext.Users.ToList();
                var usersasync = await dbContext.Users.ToListAsync();
                var first = await dbContext.Users.Where(u => u.Name.StartsWith("user")).FirstAsync();
                var find = await dbContext.Users.FindAsync(1);
                // add
                var newUser = new User { Name = "user3", Age = 22, BirthDate = DateTime.Parse("1998.10.20") };
                dbContext.Users.Add(newUser);
                dbContext.SaveChanges();
                // update
                newUser.Age = 23;
                dbContext.Users.Attach(newUser);
                dbContext.SaveChanges();
                // remove
                dbContext.Users.Remove(newUser);
                dbContext.SaveChanges();
                //addrang
                var addUsers = new List<User>();
                for (var index = 4; index < 10; index++)
                {
                    addUsers.Add(new User { Name = $"user{index}", Age = index, BirthDate = DateTime.Parse("1998.10.20").AddDays(index) });
                }
                dbContext.Users.AddRange(addUsers);
                dbContext.SaveChanges();
                //批量更新
                for (var index = 0; index < 6; index++)
                {
                    addUsers[index].Name = $"user_{index}";
                }
                dbContext.Users.AttachRange(addUsers);
                dbContext.SaveChanges();
                //批量删除
                dbContext.Users.RemoveRange(addUsers);
                dbContext.SaveChanges();

            }

            // 2
            var connectStrings = "Server=ip;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;";
            var dbContextOptionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
            dbContextOptionsBuilder.UseOscar(connectStrings);
            using var _dbContext = new MyDbContext(dbContextOptionsBuilder.Options);
            // todo

            
        }

IoC 依赖注入的方式

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(optionsAction =>
    {
        optionsAction.UseOscar("Server=ip;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;");
    });
    //or
    services.AddDbContext<MyDbContext>(optionsAction =>
    {
        optionsAction.UseOscar(Configuration.GetConnectionString("DefaultConnectionString"));
    });

    //or
    services.AddDbContext<MyDbContext>(optionsAction =>
    {
        optionsAction.UseOscar(Constants.ConnectStrings,action => {
        action.UseDefaultSchema("myschema");
        action.UseCaseSensitive();
        });
    });
}
posted @ 2020-10-23 15:05  microestc  阅读(935)  评论(0编辑  收藏  举报