國產數據庫神舟通用使用 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();
        });
    });
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM