目前 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();
});
});
}