mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-18 03:53:21 +08:00
源代码改用vs默认格式化
This commit is contained in:
parent
873364c7ee
commit
f8c3608fda
@ -8,17 +8,21 @@ using BenchmarkDotNet.Running;
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
//using SqlSugar;
|
//using SqlSugar;
|
||||||
|
|
||||||
namespace FreeSql.Bechmarker {
|
namespace FreeSql.Bechmarker
|
||||||
|
{
|
||||||
|
|
||||||
public class Program {
|
public class Program
|
||||||
public static void Main(string[] args) {
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
var summaryInsert = BenchmarkRunner.Run<OrmVsInsert>();
|
var summaryInsert = BenchmarkRunner.Run<OrmVsInsert>();
|
||||||
var summarySelect = BenchmarkRunner.Run<OrmVsSelect>();
|
var summarySelect = BenchmarkRunner.Run<OrmVsSelect>();
|
||||||
var summaryUpdate = BenchmarkRunner.Run<OrmVsUpdate>();
|
var summaryUpdate = BenchmarkRunner.Run<OrmVsUpdate>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Orm {
|
public class Orm
|
||||||
|
{
|
||||||
public static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
|
public static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
|
||||||
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=20")
|
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=20")
|
||||||
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=20")
|
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=20")
|
||||||
@ -39,9 +43,11 @@ namespace FreeSql.Bechmarker {
|
|||||||
// });
|
// });
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
class SongContext : DbContext {
|
class SongContext : DbContext
|
||||||
|
{
|
||||||
public DbSet<Song> Songs { get; set; }
|
public DbSet<Song> Songs { get; set; }
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
optionsBuilder.UseSqlServer(@"Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=21;Max Pool Size=21");
|
optionsBuilder.UseSqlServer(@"Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=21;Max Pool Size=21");
|
||||||
//optionsBuilder.UseMySql("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=21;Max Pool Size=21");
|
//optionsBuilder.UseMySql("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=21;Max Pool Size=21");
|
||||||
}
|
}
|
||||||
@ -49,14 +55,16 @@ namespace FreeSql.Bechmarker {
|
|||||||
|
|
||||||
[CoreJob]
|
[CoreJob]
|
||||||
[RPlotExporter, RankColumn]
|
[RPlotExporter, RankColumn]
|
||||||
public class OrmVsInsert {
|
public class OrmVsInsert
|
||||||
|
{
|
||||||
public IEnumerable<Song> songs;
|
public IEnumerable<Song> songs;
|
||||||
|
|
||||||
[Params(1, 500, 1000, 5000, 10000, 50000, 100000)]
|
[Params(1, 500, 1000, 5000, 10000, 50000, 100000)]
|
||||||
public int size;
|
public int size;
|
||||||
|
|
||||||
[GlobalSetup]
|
[GlobalSetup]
|
||||||
public void Setup() {
|
public void Setup()
|
||||||
|
{
|
||||||
Orm.fsql.CodeFirst.SyncStructure(typeof(Song), typeof(Song_tag), typeof(Tag));
|
Orm.fsql.CodeFirst.SyncStructure(typeof(Song), typeof(Song_tag), typeof(Tag));
|
||||||
//Orm.sugar.CodeFirst.InitTables(typeof(Song), typeof(Song_tag), typeof(Tag));
|
//Orm.sugar.CodeFirst.InitTables(typeof(Song), typeof(Song_tag), typeof(Tag));
|
||||||
//sugar创建表失败:SqlSugar.SqlSugarException: Sequence contains no elements
|
//sugar创建表失败:SqlSugar.SqlSugarException: Sequence contains no elements
|
||||||
@ -66,7 +74,8 @@ namespace FreeSql.Bechmarker {
|
|||||||
//Orm.sugar.Deleteable<Song>().Where(a => a.Id > 0).ExecuteCommand();
|
//Orm.sugar.Deleteable<Song>().Where(a => a.Id > 0).ExecuteCommand();
|
||||||
Orm.fsql.Ado.ExecuteNonQuery("delete from efcore_song");
|
Orm.fsql.Ado.ExecuteNonQuery("delete from efcore_song");
|
||||||
|
|
||||||
songs = Enumerable.Range(0, size).Select(a => new Song {
|
songs = Enumerable.Range(0, size).Select(a => new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Is_deleted = false,
|
Is_deleted = false,
|
||||||
Title = $"Insert_{a}",
|
Title = $"Insert_{a}",
|
||||||
@ -76,7 +85,8 @@ namespace FreeSql.Bechmarker {
|
|||||||
//预热
|
//预热
|
||||||
Orm.fsql.Insert(songs.First()).ExecuteAffrows();
|
Orm.fsql.Insert(songs.First()).ExecuteAffrows();
|
||||||
//Orm.sugar.Insertable(songs.First()).ExecuteCommand();
|
//Orm.sugar.Insertable(songs.First()).ExecuteCommand();
|
||||||
using (var db = new SongContext()) {
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
//db.Configuration.AutoDetectChangesEnabled = false;
|
//db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
db.Songs.AddRange(songs.First());
|
db.Songs.AddRange(songs.First());
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
@ -90,8 +100,10 @@ namespace FreeSql.Bechmarker {
|
|||||||
//public int SqlSugarInsert() => Orm.sugar.Insertable(songs.ToArray()).ExecuteCommand();
|
//public int SqlSugarInsert() => Orm.sugar.Insertable(songs.ToArray()).ExecuteCommand();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public int EfCoreInsert() {
|
public int EfCoreInsert()
|
||||||
using (var db = new SongContext()) {
|
{
|
||||||
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
//db.Configuration.AutoDetectChangesEnabled = false;
|
//db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
db.Songs.AddRange(songs.ToArray());
|
db.Songs.AddRange(songs.ToArray());
|
||||||
return db.SaveChanges();
|
return db.SaveChanges();
|
||||||
@ -101,14 +113,16 @@ namespace FreeSql.Bechmarker {
|
|||||||
|
|
||||||
[CoreJob]
|
[CoreJob]
|
||||||
[RPlotExporter, RankColumn]
|
[RPlotExporter, RankColumn]
|
||||||
public class OrmVsUpdate {
|
public class OrmVsUpdate
|
||||||
|
{
|
||||||
public List<Song> songs;
|
public List<Song> songs;
|
||||||
|
|
||||||
[Params(1, 500, 1000, 5000, 10000, 50000, 100000)]
|
[Params(1, 500, 1000, 5000, 10000, 50000, 100000)]
|
||||||
public int size;
|
public int size;
|
||||||
|
|
||||||
[GlobalSetup]
|
[GlobalSetup]
|
||||||
public void Setup() {
|
public void Setup()
|
||||||
|
{
|
||||||
songs = Orm.fsql.Select<Song>().Limit(size).ToList();
|
songs = Orm.fsql.Select<Song>().Limit(size).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,8 +133,10 @@ namespace FreeSql.Bechmarker {
|
|||||||
//public int SqlSugarUpdate() => Orm.sugar.Updateable(songs).ExecuteCommand();
|
//public int SqlSugarUpdate() => Orm.sugar.Updateable(songs).ExecuteCommand();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public int EfCoreUpdate() {
|
public int EfCoreUpdate()
|
||||||
using (var db = new SongContext()) {
|
{
|
||||||
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
//db.Configuration.AutoDetectChangesEnabled = false;
|
//db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
db.Songs.UpdateRange(songs.ToArray());
|
db.Songs.UpdateRange(songs.ToArray());
|
||||||
return db.SaveChanges();
|
return db.SaveChanges();
|
||||||
@ -130,13 +146,15 @@ namespace FreeSql.Bechmarker {
|
|||||||
|
|
||||||
[CoreJob]
|
[CoreJob]
|
||||||
[RPlotExporter, RankColumn]
|
[RPlotExporter, RankColumn]
|
||||||
public class OrmVsSelect {
|
public class OrmVsSelect
|
||||||
|
{
|
||||||
|
|
||||||
[Params(1, 500, 1000, 5000, 10000, 50000, 100000)]
|
[Params(1, 500, 1000, 5000, 10000, 50000, 100000)]
|
||||||
public int size;
|
public int size;
|
||||||
|
|
||||||
[GlobalSetup]
|
[GlobalSetup]
|
||||||
public void Setup() {
|
public void Setup()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,8 +165,10 @@ namespace FreeSql.Bechmarker {
|
|||||||
//public List<Song> SqlSugarSelect() => Orm.sugar.Queryable<Song>().Take(size).ToList();
|
//public List<Song> SqlSugarSelect() => Orm.sugar.Queryable<Song>().Take(size).ToList();
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public List<Song> EfCoreSelect() {
|
public List<Song> EfCoreSelect()
|
||||||
using (var db = new SongContext()) {
|
{
|
||||||
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
return db.Songs.Take(size).AsNoTracking().ToList();
|
return db.Songs.Take(size).AsNoTracking().ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -157,7 +177,8 @@ namespace FreeSql.Bechmarker {
|
|||||||
[FreeSql.DataAnnotations.Table(Name = "freesql_song")]
|
[FreeSql.DataAnnotations.Table(Name = "freesql_song")]
|
||||||
//[SugarTable("sugar_song")]
|
//[SugarTable("sugar_song")]
|
||||||
[Table("efcore_song")]
|
[Table("efcore_song")]
|
||||||
public class Song {
|
public class Song
|
||||||
|
{
|
||||||
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
||||||
//[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
//[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
[Key]
|
[Key]
|
||||||
@ -175,7 +196,8 @@ namespace FreeSql.Bechmarker {
|
|||||||
[FreeSql.DataAnnotations.Table(Name = "freesql_song_tag")]
|
[FreeSql.DataAnnotations.Table(Name = "freesql_song_tag")]
|
||||||
//[SugarTable("sugar_song_tag")]
|
//[SugarTable("sugar_song_tag")]
|
||||||
[Table("efcore_song_tag")]
|
[Table("efcore_song_tag")]
|
||||||
public class Song_tag {
|
public class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
//[SugarColumn(IsIgnore = true)]
|
//[SugarColumn(IsIgnore = true)]
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
@ -189,7 +211,8 @@ namespace FreeSql.Bechmarker {
|
|||||||
[FreeSql.DataAnnotations.Table(Name = "freesql_tag")]
|
[FreeSql.DataAnnotations.Table(Name = "freesql_tag")]
|
||||||
//[SugarTable("sugar_tag")]
|
//[SugarTable("sugar_tag")]
|
||||||
[Table("efcore_tag")]
|
[Table("efcore_tag")]
|
||||||
public class Tag {
|
public class Tag
|
||||||
|
{
|
||||||
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
||||||
//[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
//[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
[Key]
|
[Key]
|
||||||
|
@ -5,17 +5,20 @@ using System.Threading.Tasks;
|
|||||||
using FreeSql;
|
using FreeSql;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace dbcontext_01.Controllers {
|
namespace dbcontext_01.Controllers
|
||||||
|
{
|
||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class ValuesController : ControllerBase {
|
public class ValuesController : ControllerBase
|
||||||
|
{
|
||||||
|
|
||||||
IFreeSql _orm;
|
IFreeSql _orm;
|
||||||
SongContext _songContext;
|
SongContext _songContext;
|
||||||
public ValuesController(SongContext songContext,
|
public ValuesController(SongContext songContext,
|
||||||
IFreeSql orm1, IFreeSql orm2,
|
IFreeSql orm1, IFreeSql orm2,
|
||||||
IFreeSql<long> orm3
|
IFreeSql<long> orm3
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
_songContext = songContext;
|
_songContext = songContext;
|
||||||
_orm = orm1;
|
_orm = orm1;
|
||||||
|
|
||||||
@ -23,11 +26,13 @@ namespace dbcontext_01.Controllers {
|
|||||||
|
|
||||||
// GET api/values
|
// GET api/values
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
async public Task<string> Get() {
|
async public Task<string> Get()
|
||||||
|
{
|
||||||
|
|
||||||
long id = 0;
|
long id = 0;
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
|
|
||||||
var repos2Song = _orm.GetRepository<Song, int>();
|
var repos2Song = _orm.GetRepository<Song, int>();
|
||||||
repos2Song.Where(a => a.Id > 10).ToList();
|
repos2Song.Where(a => a.Id > 10).ToList();
|
||||||
@ -61,7 +66,8 @@ namespace dbcontext_01.Controllers {
|
|||||||
|
|
||||||
|
|
||||||
var ctx = _songContext;
|
var ctx = _songContext;
|
||||||
var tag = new Tag {
|
var tag = new Tag
|
||||||
|
{
|
||||||
Name = "testaddsublist",
|
Name = "testaddsublist",
|
||||||
Tags = new[] {
|
Tags = new[] {
|
||||||
new Tag { Name = "sub1" },
|
new Tag { Name = "sub1" },
|
||||||
@ -79,7 +85,8 @@ namespace dbcontext_01.Controllers {
|
|||||||
|
|
||||||
ctx.UnitOfWork.GetOrBeginTransaction();
|
ctx.UnitOfWork.GetOrBeginTransaction();
|
||||||
|
|
||||||
var tagAsync = new Tag {
|
var tagAsync = new Tag
|
||||||
|
{
|
||||||
Name = "testaddsublist",
|
Name = "testaddsublist",
|
||||||
Tags = new[] {
|
Tags = new[] {
|
||||||
new Tag { Name = "sub1" },
|
new Tag { Name = "sub1" },
|
||||||
@ -141,7 +148,8 @@ namespace dbcontext_01.Controllers {
|
|||||||
//打包【执行队列】,提交事务
|
//打包【执行队列】,提交事务
|
||||||
|
|
||||||
|
|
||||||
using (var uow = _orm.CreateUnitOfWork()) {
|
using (var uow = _orm.CreateUnitOfWork())
|
||||||
|
{
|
||||||
|
|
||||||
var reposSong = uow.GetRepository<Song, int>();
|
var reposSong = uow.GetRepository<Song, int>();
|
||||||
reposSong.Where(a => a.Id > 10).ToList();
|
reposSong.Where(a => a.Id > 10).ToList();
|
||||||
@ -205,7 +213,9 @@ namespace dbcontext_01.Controllers {
|
|||||||
|
|
||||||
// await ctx.SaveChangesAsync();
|
// await ctx.SaveChangesAsync();
|
||||||
//}
|
//}
|
||||||
} catch {
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
var item = await _orm.Select<Song>().Where(a => a.Id == id).FirstAsync();
|
var item = await _orm.Select<Song>().Where(a => a.Id == id).FirstAsync();
|
||||||
|
|
||||||
throw;
|
throw;
|
||||||
@ -219,23 +229,27 @@ namespace dbcontext_01.Controllers {
|
|||||||
|
|
||||||
// GET api/values/5
|
// GET api/values/5
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public ActionResult<string> Get(int id) {
|
public ActionResult<string> Get(int id)
|
||||||
|
{
|
||||||
return "value";
|
return "value";
|
||||||
}
|
}
|
||||||
|
|
||||||
// POST api/values
|
// POST api/values
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void Post([FromBody] string value) {
|
public void Post([FromBody] string value)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// PUT api/values/5
|
// PUT api/values/5
|
||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
public void Put(int id, [FromBody] string value) {
|
public void Put(int id, [FromBody] string value)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// DELETE api/values/5
|
// DELETE api/values/5
|
||||||
[HttpDelete("{id}")]
|
[HttpDelete("{id}")]
|
||||||
public void Delete(int id) {
|
public void Delete(int id)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,11 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace dbcontext_01 {
|
namespace dbcontext_01
|
||||||
|
{
|
||||||
|
|
||||||
public class SongContext : DbContext {
|
public class SongContext : DbContext
|
||||||
|
{
|
||||||
|
|
||||||
public DbSet<Song> Songs { get; set; }
|
public DbSet<Song> Songs { get; set; }
|
||||||
public DbSet<Tag> Tags { get; set; }
|
public DbSet<Tag> Tags { get; set; }
|
||||||
@ -16,7 +18,8 @@ namespace dbcontext_01 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class Song {
|
public class Song
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public DateTime? Create_time { get; set; }
|
public DateTime? Create_time { get; set; }
|
||||||
@ -29,7 +32,8 @@ namespace dbcontext_01 {
|
|||||||
[Column(IsVersion = true)]
|
[Column(IsVersion = true)]
|
||||||
public long versionRow { get; set; }
|
public long versionRow { get; set; }
|
||||||
}
|
}
|
||||||
public class Song_tag {
|
public class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
public virtual Song Song { get; set; }
|
public virtual Song Song { get; set; }
|
||||||
|
|
||||||
@ -37,7 +41,8 @@ namespace dbcontext_01 {
|
|||||||
public virtual Tag Tag { get; set; }
|
public virtual Tag Tag { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Tag {
|
public class Tag
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Parent_id { get; set; }
|
public int? Parent_id { get; set; }
|
||||||
|
@ -17,7 +17,8 @@ namespace dbcontext_01
|
|||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
|
|
||||||
public class Song {
|
public class Song
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string BigNumber { get; set; }
|
public string BigNumber { get; set; }
|
||||||
@ -26,16 +27,19 @@ namespace dbcontext_01
|
|||||||
public long versionRow { get; set; }
|
public long versionRow { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SongContext : DbContext {
|
public class SongContext : DbContext
|
||||||
|
{
|
||||||
|
|
||||||
public DbSet<Song> Songs { get; set; }
|
public DbSet<Song> Songs { get; set; }
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder builder) {
|
protected override void OnConfiguring(DbContextOptionsBuilder builder)
|
||||||
|
{
|
||||||
builder.UseFreeSql(fsql);
|
builder.UseFreeSql(fsql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static IFreeSql fsql;
|
static IFreeSql fsql;
|
||||||
public static void Main(string[] args) {
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
fsql = new FreeSql.FreeSqlBuilder()
|
fsql = new FreeSql.FreeSqlBuilder()
|
||||||
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\dd2.db;Pooling=true;Max Pool Size=10")
|
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\dd2.db;Pooling=true;Max Pool Size=10")
|
||||||
.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
@ -46,7 +50,8 @@ namespace dbcontext_01
|
|||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
||||||
using (var ctx = new SongContext()) {
|
using (var ctx = new SongContext())
|
||||||
|
{
|
||||||
var song = new Song { BigNumber = "1000000000000000000" };
|
var song = new Song { BigNumber = "1000000000000000000" };
|
||||||
ctx.Songs.Add(song);
|
ctx.Songs.Add(song);
|
||||||
|
|
||||||
|
@ -34,17 +34,21 @@ namespace dbcontext_01
|
|||||||
(cmd, log) => Trace.WriteLine(log)
|
(cmd, log) => Trace.WriteLine(log)
|
||||||
)
|
)
|
||||||
.Build();
|
.Build();
|
||||||
Fsql.Aop.SyncStructureBefore = (s, e) => {
|
Fsql.Aop.SyncStructureBefore = (s, e) =>
|
||||||
|
{
|
||||||
Console.WriteLine(e.Identifier + ": " + string.Join(", ", e.EntityTypes.Select(a => a.FullName)));
|
Console.WriteLine(e.Identifier + ": " + string.Join(", ", e.EntityTypes.Select(a => a.FullName)));
|
||||||
};
|
};
|
||||||
Fsql.Aop.SyncStructureAfter = (s, e) => {
|
Fsql.Aop.SyncStructureAfter = (s, e) =>
|
||||||
|
{
|
||||||
Console.WriteLine(e.Identifier + ": " + string.Join(", ", e.EntityTypes.Select(a => a.FullName)) + " " + e.ElapsedMilliseconds + "ms\r\n" + e.Exception?.Message + e.Sql);
|
Console.WriteLine(e.Identifier + ": " + string.Join(", ", e.EntityTypes.Select(a => a.FullName)) + " " + e.ElapsedMilliseconds + "ms\r\n" + e.Exception?.Message + e.Sql);
|
||||||
};
|
};
|
||||||
|
|
||||||
Fsql.Aop.CurdBefore = (s, e) => {
|
Fsql.Aop.CurdBefore = (s, e) =>
|
||||||
|
{
|
||||||
Console.WriteLine(e.Identifier + ": " + e.EntityType.FullName + ", " + e.Sql);
|
Console.WriteLine(e.Identifier + ": " + e.EntityType.FullName + ", " + e.Sql);
|
||||||
};
|
};
|
||||||
Fsql.Aop.CurdAfter = (s, e) => {
|
Fsql.Aop.CurdAfter = (s, e) =>
|
||||||
|
{
|
||||||
Console.WriteLine(e.Identifier + ": " + e.EntityType.FullName + " " + e.ElapsedMilliseconds + "ms, " + e.Sql);
|
Console.WriteLine(e.Identifier + ": " + e.EntityType.FullName + " " + e.ElapsedMilliseconds + "ms, " + e.Sql);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,8 +74,10 @@ namespace dbcontext_01
|
|||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddMvc();
|
services.AddMvc();
|
||||||
services.AddSwaggerGen(options => {
|
services.AddSwaggerGen(options =>
|
||||||
options.SwaggerDoc("v1", new Info {
|
{
|
||||||
|
options.SwaggerDoc("v1", new Info
|
||||||
|
{
|
||||||
Version = "v1",
|
Version = "v1",
|
||||||
Title = "FreeSql.DbContext API"
|
Title = "FreeSql.DbContext API"
|
||||||
});
|
});
|
||||||
@ -90,7 +96,8 @@ namespace dbcontext_01
|
|||||||
var sql3 = Fsql.Update<Song>(1).Set(a => a.Create_time.Value.AddHours(1)).ToSql();
|
var sql3 = Fsql.Update<Song>(1).Set(a => a.Create_time.Value.AddHours(1)).ToSql();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
|
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
|
||||||
Console.InputEncoding = Encoding.GetEncoding("GB2312");
|
Console.InputEncoding = Encoding.GetEncoding("GB2312");
|
||||||
@ -103,7 +110,8 @@ namespace dbcontext_01
|
|||||||
app.UseMvc();
|
app.UseMvc();
|
||||||
|
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI(c => {
|
app.UseSwaggerUI(c =>
|
||||||
|
{
|
||||||
c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1");
|
c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,21 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace efcore_to_freesql.DBContexts {
|
namespace efcore_to_freesql.DBContexts
|
||||||
|
{
|
||||||
|
|
||||||
public class BaseDBContext : DbContext {
|
public class BaseDBContext : DbContext
|
||||||
|
{
|
||||||
|
|
||||||
public static IFreeSql Fsql { get; set; }
|
public static IFreeSql Fsql { get; set; }
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder) {
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
base.OnModelCreating(modelBuilder);
|
base.OnModelCreating(modelBuilder);
|
||||||
Fsql.CodeFirst.ConfigEntity(modelBuilder.Model); //ͬ²½ÅäÖÃ
|
Fsql.CodeFirst.ConfigEntity(modelBuilder.Model); //ͬ²½ÅäÖÃ
|
||||||
}
|
}
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
optionsBuilder.UseSqlite(@"Data Source=|DataDirectory|\document.db;Pooling=true;Max Pool Size=10");
|
optionsBuilder.UseSqlite(@"Data Source=|DataDirectory|\document.db;Pooling=true;Max Pool Size=10");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
using efcore_to_freesql.Entitys;
|
using efcore_to_freesql.Entitys;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace efcore_to_freesql.DBContexts {
|
namespace efcore_to_freesql.DBContexts
|
||||||
|
{
|
||||||
|
|
||||||
public class Topic1Context : BaseDBContext {
|
public class Topic1Context : BaseDBContext
|
||||||
|
{
|
||||||
|
|
||||||
public DbSet<Topic1> Topic1s { get; set; }
|
public DbSet<Topic1> Topic1s { get; set; }
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder) {
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
modelBuilder.Entity<Topic1>().ToTable("topic1_sss").HasKey(a => a.Id);
|
modelBuilder.Entity<Topic1>().ToTable("topic1_sss").HasKey(a => a.Id);
|
||||||
modelBuilder.Entity<Topic1>().Property(a => a.Id).HasColumnName("topic1_id").ValueGeneratedOnAdd();
|
modelBuilder.Entity<Topic1>().Property(a => a.Id).HasColumnName("topic1_id").ValueGeneratedOnAdd();
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
using efcore_to_freesql.Entitys;
|
using efcore_to_freesql.Entitys;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace efcore_to_freesql.DBContexts {
|
namespace efcore_to_freesql.DBContexts
|
||||||
|
{
|
||||||
|
|
||||||
public class Topic2Context : BaseDBContext {
|
public class Topic2Context : BaseDBContext
|
||||||
|
{
|
||||||
|
|
||||||
public DbSet<Topic2> Topic2s { get; set; }
|
public DbSet<Topic2> Topic2s { get; set; }
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder) {
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
modelBuilder.Entity<Topic2>().ToTable("topic2_sss");
|
modelBuilder.Entity<Topic2>().ToTable("topic2_sss");
|
||||||
modelBuilder.Entity<Topic2>().Property(a => a.Id).HasColumnName("topic2_id");
|
modelBuilder.Entity<Topic2>().Property(a => a.Id).HasColumnName("topic2_id");
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace efcore_to_freesql.Entitys {
|
namespace efcore_to_freesql.Entitys
|
||||||
|
{
|
||||||
|
|
||||||
public class Topic1
|
public class Topic1
|
||||||
{
|
{
|
||||||
|
@ -2,7 +2,8 @@ using System;
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace efcore_to_freesql.Entitys {
|
namespace efcore_to_freesql.Entitys
|
||||||
|
{
|
||||||
|
|
||||||
public class Topic2
|
public class Topic2
|
||||||
{
|
{
|
||||||
|
@ -6,20 +6,25 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public static class CodeFirstExtensions {
|
public static class CodeFirstExtensions
|
||||||
|
{
|
||||||
|
|
||||||
public static void ConfigEntity(this ICodeFirst codeFirst, IModel efmodel) {
|
public static void ConfigEntity(this ICodeFirst codeFirst, IModel efmodel)
|
||||||
|
{
|
||||||
|
|
||||||
foreach (var type in efmodel.GetEntityTypes()) {
|
foreach (var type in efmodel.GetEntityTypes())
|
||||||
|
{
|
||||||
|
|
||||||
codeFirst.ConfigEntity(type.ClrType, a => {
|
codeFirst.ConfigEntity(type.ClrType, a =>
|
||||||
|
{
|
||||||
|
|
||||||
//表名
|
//表名
|
||||||
var relationalTableName = type.FindAnnotation("Relational:TableName");
|
var relationalTableName = type.FindAnnotation("Relational:TableName");
|
||||||
if (relationalTableName != null)
|
if (relationalTableName != null)
|
||||||
a.Name(relationalTableName.Value?.ToString() ?? type.ClrType.Name);
|
a.Name(relationalTableName.Value?.ToString() ?? type.ClrType.Name);
|
||||||
|
|
||||||
foreach (var prop in type.GetProperties()) {
|
foreach (var prop in type.GetProperties())
|
||||||
|
{
|
||||||
|
|
||||||
var freeProp = a.Property(prop.Name);
|
var freeProp = a.Property(prop.Name);
|
||||||
|
|
||||||
@ -46,10 +51,12 @@ public static class CodeFirstExtensions {
|
|||||||
|
|
||||||
//类型
|
//类型
|
||||||
var relationalColumnType = prop.FindAnnotation("Relational:ColumnType");
|
var relationalColumnType = prop.FindAnnotation("Relational:ColumnType");
|
||||||
if (relationalColumnType != null) {
|
if (relationalColumnType != null)
|
||||||
|
{
|
||||||
|
|
||||||
var dbType = relationalColumnType.ToString();
|
var dbType = relationalColumnType.ToString();
|
||||||
if (!string.IsNullOrEmpty(dbType)) {
|
if (!string.IsNullOrEmpty(dbType))
|
||||||
|
{
|
||||||
|
|
||||||
var maxLength = prop.FindAnnotation("MaxLength");
|
var maxLength = prop.FindAnnotation("MaxLength");
|
||||||
if (maxLength != null)
|
if (maxLength != null)
|
||||||
|
@ -39,10 +39,12 @@ namespace efcore_to_freesql
|
|||||||
var sql22 = Fsql.Insert<Topic2>().AppendData(new Topic2()).ToSql();
|
var sql22 = Fsql.Insert<Topic2>().AppendData(new Topic2()).ToSql();
|
||||||
//INSERT INTO "Topic2"("Id", "Title", "CreateTime") VALUES(@Id0, @Title0, @CreateTime0)
|
//INSERT INTO "Topic2"("Id", "Title", "CreateTime") VALUES(@Id0, @Title0, @CreateTime0)
|
||||||
|
|
||||||
using (var db = new Topic1Context()) {
|
using (var db = new Topic1Context())
|
||||||
|
{
|
||||||
db.Topic1s.Add(new Topic1());
|
db.Topic1s.Add(new Topic1());
|
||||||
}
|
}
|
||||||
using (var db = new Topic2Context()) {
|
using (var db = new Topic2Context())
|
||||||
|
{
|
||||||
db.Topic2s.Add(new Topic2());
|
db.Topic2s.Add(new Topic2());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,8 +22,10 @@ namespace orm_vs
|
|||||||
//.UseConfigEntityFromDbFirst(true)
|
//.UseConfigEntityFromDbFirst(true)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
static SqlSugarClient sugar {
|
static SqlSugarClient sugar
|
||||||
get => new SqlSugarClient(new ConnectionConfig() {
|
{
|
||||||
|
get => new SqlSugarClient(new ConnectionConfig()
|
||||||
|
{
|
||||||
//不欺负,让连接池100个最小
|
//不欺负,让连接池100个最小
|
||||||
//ConnectionString = "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=20;Max Pool Size=20",
|
//ConnectionString = "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=20;Max Pool Size=20",
|
||||||
//DbType = DbType.SqlServer,
|
//DbType = DbType.SqlServer,
|
||||||
@ -34,21 +36,25 @@ namespace orm_vs
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class SongContext : DbContext {
|
class SongContext : DbContext
|
||||||
|
{
|
||||||
public DbSet<Song> Songs { get; set; }
|
public DbSet<Song> Songs { get; set; }
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
//optionsBuilder.UseSqlServer(@"Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=21;Max Pool Size=21");
|
//optionsBuilder.UseSqlServer(@"Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=21;Max Pool Size=21");
|
||||||
optionsBuilder.UseMySql("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=21;Max Pool Size=21");
|
optionsBuilder.UseMySql("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=21;Max Pool Size=21");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Main(string[] args) {
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
|
||||||
fsql.CodeFirst.SyncStructure(typeof(Song), typeof(Song_tag), typeof(Tag));
|
fsql.CodeFirst.SyncStructure(typeof(Song), typeof(Song_tag), typeof(Tag));
|
||||||
//sugar.CodeFirst.InitTables(typeof(Song), typeof(Song_tag), typeof(Tag));
|
//sugar.CodeFirst.InitTables(typeof(Song), typeof(Song_tag), typeof(Tag));
|
||||||
//sugar创建表失败:SqlSugar.SqlSugarException: Sequence contains no elements
|
//sugar创建表失败:SqlSugar.SqlSugarException: Sequence contains no elements
|
||||||
|
|
||||||
sugar.Aop.OnLogExecuted = (s, e) => {
|
sugar.Aop.OnLogExecuted = (s, e) =>
|
||||||
|
{
|
||||||
Trace.WriteLine(s);
|
Trace.WriteLine(s);
|
||||||
};
|
};
|
||||||
//测试前清空数据
|
//测试前清空数据
|
||||||
@ -124,7 +130,8 @@ namespace orm_vs
|
|||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Select(StringBuilder sb, int forTime, int size) {
|
static void Select(StringBuilder sb, int forTime, int size)
|
||||||
|
{
|
||||||
Stopwatch sw = new Stopwatch();
|
Stopwatch sw = new Stopwatch();
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
for (var a = 0; a < forTime; a++)
|
for (var a = 0; a < forTime; a++)
|
||||||
@ -139,8 +146,10 @@ namespace orm_vs
|
|||||||
sb.AppendLine($"SqlSugar Select {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms");
|
sb.AppendLine($"SqlSugar Select {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms");
|
||||||
|
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
for (var a = 0; a < forTime; a++) {
|
for (var a = 0; a < forTime; a++)
|
||||||
using (var db = new SongContext()) {
|
{
|
||||||
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
db.Songs.Take(size).AsNoTracking().ToList();
|
db.Songs.Take(size).AsNoTracking().ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,8 +157,10 @@ namespace orm_vs
|
|||||||
sb.AppendLine($"EFCore Select {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms\r\n");
|
sb.AppendLine($"EFCore Select {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Insert(StringBuilder sb, int forTime, int size) {
|
static void Insert(StringBuilder sb, int forTime, int size)
|
||||||
var songs = Enumerable.Range(0, size).Select(a => new Song {
|
{
|
||||||
|
var songs = Enumerable.Range(0, size).Select(a => new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Is_deleted = false,
|
Is_deleted = false,
|
||||||
Title = $"Insert_{a}",
|
Title = $"Insert_{a}",
|
||||||
@ -159,7 +170,8 @@ namespace orm_vs
|
|||||||
//预热
|
//预热
|
||||||
fsql.Insert(songs.First()).ExecuteAffrows();
|
fsql.Insert(songs.First()).ExecuteAffrows();
|
||||||
sugar.Insertable(songs.First()).ExecuteCommand();
|
sugar.Insertable(songs.First()).ExecuteCommand();
|
||||||
using (var db = new SongContext()) {
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
//db.Configuration.AutoDetectChangesEnabled = false;
|
//db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
db.Songs.AddRange(songs.First());
|
db.Songs.AddRange(songs.First());
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
@ -167,7 +179,8 @@ namespace orm_vs
|
|||||||
Stopwatch sw = new Stopwatch();
|
Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
for (var a = 0; a < forTime; a++) {
|
for (var a = 0; a < forTime; a++)
|
||||||
|
{
|
||||||
fsql.Insert(songs).ExecuteAffrows();
|
fsql.Insert(songs).ExecuteAffrows();
|
||||||
//using (var db = new FreeSongContext()) {
|
//using (var db = new FreeSongContext()) {
|
||||||
// //db.Configuration.AutoDetectChangesEnabled = false;
|
// //db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
@ -180,19 +193,24 @@ namespace orm_vs
|
|||||||
|
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
Exception sugarEx = null;
|
Exception sugarEx = null;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
for (var a = 0; a < forTime; a++)
|
for (var a = 0; a < forTime; a++)
|
||||||
sugar.Insertable(songs.ToArray()).ExecuteCommand();
|
sugar.Insertable(songs.ToArray()).ExecuteCommand();
|
||||||
} catch (Exception ex) {
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
sugarEx = ex;
|
sugarEx = ex;
|
||||||
}
|
}
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
sb.AppendLine($"SqlSugar Insert {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms" + (sugarEx != null ? $"成绩无效,错误:{sugarEx.Message}" : ""));
|
sb.AppendLine($"SqlSugar Insert {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms" + (sugarEx != null ? $"成绩无效,错误:{sugarEx.Message}" : ""));
|
||||||
|
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
for (var a = 0; a < forTime; a++) {
|
for (var a = 0; a < forTime; a++)
|
||||||
|
{
|
||||||
|
|
||||||
using (var db = new SongContext()) {
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
//db.Configuration.AutoDetectChangesEnabled = false;
|
//db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
db.Songs.AddRange(songs.ToArray());
|
db.Songs.AddRange(songs.ToArray());
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
@ -202,12 +220,14 @@ namespace orm_vs
|
|||||||
sb.AppendLine($"EFCore Insert {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms\r\n");
|
sb.AppendLine($"EFCore Insert {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Update(StringBuilder sb, int forTime, int size) {
|
static void Update(StringBuilder sb, int forTime, int size)
|
||||||
|
{
|
||||||
Stopwatch sw = new Stopwatch();
|
Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
var songs = fsql.Select<Song>().Limit(size).ToList();
|
var songs = fsql.Select<Song>().Limit(size).ToList();
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
for (var a = 0; a < forTime; a++) {
|
for (var a = 0; a < forTime; a++)
|
||||||
|
{
|
||||||
fsql.Update<Song>().SetSource(songs).ExecuteAffrows();
|
fsql.Update<Song>().SetSource(songs).ExecuteAffrows();
|
||||||
}
|
}
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
@ -216,22 +236,28 @@ namespace orm_vs
|
|||||||
songs = sugar.Queryable<Song>().Take(size).ToList();
|
songs = sugar.Queryable<Song>().Take(size).ToList();
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
Exception sugarEx = null;
|
Exception sugarEx = null;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
for (var a = 0; a < forTime; a++)
|
for (var a = 0; a < forTime; a++)
|
||||||
sugar.Updateable(songs).ExecuteCommand();
|
sugar.Updateable(songs).ExecuteCommand();
|
||||||
} catch (Exception ex) {
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
sugarEx = ex;
|
sugarEx = ex;
|
||||||
}
|
}
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
sb.AppendLine($"SqlSugar Update {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms" + (sugarEx != null ? $"成绩无效,错误:{sugarEx.Message}" : ""));
|
sb.AppendLine($"SqlSugar Update {size}条数据,循环{forTime}次,耗时{sw.ElapsedMilliseconds}ms" + (sugarEx != null ? $"成绩无效,错误:{sugarEx.Message}" : ""));
|
||||||
|
|
||||||
using (var db = new SongContext()) {
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
songs = db.Songs.Take(size).AsNoTracking().ToList();
|
songs = db.Songs.Take(size).AsNoTracking().ToList();
|
||||||
}
|
}
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
for (var a = 0; a < forTime; a++) {
|
for (var a = 0; a < forTime; a++)
|
||||||
|
{
|
||||||
|
|
||||||
using (var db = new SongContext()) {
|
using (var db = new SongContext())
|
||||||
|
{
|
||||||
//db.Configuration.AutoDetectChangesEnabled = false;
|
//db.Configuration.AutoDetectChangesEnabled = false;
|
||||||
db.Songs.UpdateRange(songs.ToArray());
|
db.Songs.UpdateRange(songs.ToArray());
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
@ -245,7 +271,8 @@ namespace orm_vs
|
|||||||
[FreeSql.DataAnnotations.Table(Name = "freesql_song")]
|
[FreeSql.DataAnnotations.Table(Name = "freesql_song")]
|
||||||
[SugarTable("sugar_song")]
|
[SugarTable("sugar_song")]
|
||||||
[Table("efcore_song")]
|
[Table("efcore_song")]
|
||||||
public class Song {
|
public class Song
|
||||||
|
{
|
||||||
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
||||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
[Key]
|
[Key]
|
||||||
@ -263,7 +290,8 @@ namespace orm_vs
|
|||||||
[FreeSql.DataAnnotations.Table(Name = "freesql_song_tag")]
|
[FreeSql.DataAnnotations.Table(Name = "freesql_song_tag")]
|
||||||
[SugarTable("sugar_song_tag")]
|
[SugarTable("sugar_song_tag")]
|
||||||
[Table("efcore_song_tag")]
|
[Table("efcore_song_tag")]
|
||||||
public class Song_tag {
|
public class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
[SugarColumn(IsIgnore = true)]
|
[SugarColumn(IsIgnore = true)]
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
@ -277,7 +305,8 @@ namespace orm_vs
|
|||||||
[FreeSql.DataAnnotations.Table(Name = "freesql_tag")]
|
[FreeSql.DataAnnotations.Table(Name = "freesql_tag")]
|
||||||
[SugarTable("sugar_tag")]
|
[SugarTable("sugar_tag")]
|
||||||
[Table("efcore_tag")]
|
[Table("efcore_tag")]
|
||||||
public class Tag {
|
public class Tag
|
||||||
|
{
|
||||||
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
[FreeSql.DataAnnotations.Column(IsIdentity = true)]
|
||||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
[Key]
|
[Key]
|
||||||
|
@ -6,19 +6,24 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace restful.Controllers {
|
namespace restful.Controllers
|
||||||
|
{
|
||||||
|
|
||||||
public class SongRepository : GuidRepository<Song> {
|
public class SongRepository : GuidRepository<Song>
|
||||||
public SongRepository(IFreeSql fsql) : base(fsql) {
|
{
|
||||||
|
public SongRepository(IFreeSql fsql) : base(fsql)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("restapi/[controller]")]
|
[Route("restapi/[controller]")]
|
||||||
public class SongsController : Controller {
|
public class SongsController : Controller
|
||||||
|
{
|
||||||
|
|
||||||
BaseRepository<Song, int> _songRepository;
|
BaseRepository<Song, int> _songRepository;
|
||||||
|
|
||||||
public class xxxx {
|
public class xxxx
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
public bool IsDeleted { get; set; }
|
public bool IsDeleted { get; set; }
|
||||||
@ -38,7 +43,8 @@ namespace restful.Controllers {
|
|||||||
IReadOnlyRepository<Song> repos311, IReadOnlyRepository<Song, int> repos411,
|
IReadOnlyRepository<Song> repos311, IReadOnlyRepository<Song, int> repos411,
|
||||||
|
|
||||||
SongRepository reposSong
|
SongRepository reposSong
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
_songRepository = repos4;
|
_songRepository = repos4;
|
||||||
|
|
||||||
//test code
|
//test code
|
||||||
@ -53,37 +59,44 @@ namespace restful.Controllers {
|
|||||||
Console.WriteLine(repos2.Select.ToSql());
|
Console.WriteLine(repos2.Select.ToSql());
|
||||||
Console.WriteLine(repos21.Select.ToSql());
|
Console.WriteLine(repos21.Select.ToSql());
|
||||||
|
|
||||||
using (reposSong.DataFilter.DisableAll()) {
|
using (reposSong.DataFilter.DisableAll())
|
||||||
|
{
|
||||||
Console.WriteLine(reposSong.Select.ToSql());
|
Console.WriteLine(reposSong.Select.ToSql());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public Task<List<Song>> GetItems([FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int limit = 20) {
|
public Task<List<Song>> GetItems([FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int limit = 20)
|
||||||
|
{
|
||||||
return _songRepository.Select.WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync();
|
return _songRepository.Select.WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public Task<Song> GetItem([FromRoute] int id) {
|
public Task<Song> GetItem([FromRoute] int id)
|
||||||
|
{
|
||||||
return _songRepository.FindAsync(id);
|
return _songRepository.FindAsync(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ModelSong {
|
public class ModelSong
|
||||||
|
{
|
||||||
public string title { get; set; }
|
public string title { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost, ProducesResponseType(201)]
|
[HttpPost, ProducesResponseType(201)]
|
||||||
public Task<Song> Create([FromBody] ModelSong model) {
|
public Task<Song> Create([FromBody] ModelSong model)
|
||||||
|
{
|
||||||
return _songRepository.InsertAsync(new Song { Title = model.title });
|
return _songRepository.InsertAsync(new Song { Title = model.title });
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
public Task Update([FromRoute] int id, [FromBody] ModelSong model) {
|
public Task Update([FromRoute] int id, [FromBody] ModelSong model)
|
||||||
|
{
|
||||||
return _songRepository.UpdateAsync(new Song { Id = id, Title = model.title });
|
return _songRepository.UpdateAsync(new Song { Id = id, Title = model.title });
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPatch("{id}")]
|
[HttpPatch("{id}")]
|
||||||
async public Task<Song> UpdateDiy([FromRoute] int id, [FromForm] string title) {
|
async public Task<Song> UpdateDiy([FromRoute] int id, [FromForm] string title)
|
||||||
|
{
|
||||||
var up = _songRepository.UpdateDiy.Where(a => a.Id == id);
|
var up = _songRepository.UpdateDiy.Where(a => a.Id == id);
|
||||||
if (!string.IsNullOrEmpty(title)) up.Set(a => a.Title, title);
|
if (!string.IsNullOrEmpty(title)) up.Set(a => a.Title, title);
|
||||||
var ret = await up.ExecuteUpdatedAsync();
|
var ret = await up.ExecuteUpdatedAsync();
|
||||||
@ -91,7 +104,8 @@ namespace restful.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpDelete("{id}"), ProducesResponseType(204)]
|
[HttpDelete("{id}"), ProducesResponseType(204)]
|
||||||
public Task Delete([FromRoute] int id) {
|
public Task Delete([FromRoute] int id)
|
||||||
|
{
|
||||||
return _songRepository.DeleteAsync(a => a.Id == id);
|
return _songRepository.DeleteAsync(a => a.Id == id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using repository_01;
|
using repository_01;
|
||||||
|
|
||||||
namespace restful.Entitys {
|
namespace restful.Entitys
|
||||||
public class Song {
|
{
|
||||||
|
public class Song
|
||||||
|
{
|
||||||
|
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
@ -13,24 +13,29 @@ using System.Diagnostics;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace repository_01 {
|
namespace repository_01
|
||||||
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 用户密码信息
|
/// 用户密码信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Sys1UserLogOn {
|
public class Sys1UserLogOn
|
||||||
|
{
|
||||||
[Column(IsPrimary = true, Name = "Id")]
|
[Column(IsPrimary = true, Name = "Id")]
|
||||||
public Guid UserLogOnId { get; set; }
|
public Guid UserLogOnId { get; set; }
|
||||||
public virtual Sys1User User { get; set; }
|
public virtual Sys1User User { get; set; }
|
||||||
}
|
}
|
||||||
public class Sys1User {
|
public class Sys1User
|
||||||
|
{
|
||||||
[Column(IsPrimary = true, Name = "Id")]
|
[Column(IsPrimary = true, Name = "Id")]
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
public virtual Sys1UserLogOn UserLogOn { get; set; }
|
public virtual Sys1UserLogOn UserLogOn { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Startup {
|
public class Startup
|
||||||
public Startup(IConfiguration configuration, ILoggerFactory loggerFactory) {
|
{
|
||||||
|
public Startup(IConfiguration configuration, ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
Configuration = configuration;
|
Configuration = configuration;
|
||||||
|
|
||||||
Fsql = new FreeSql.FreeSqlBuilder()
|
Fsql = new FreeSql.FreeSqlBuilder()
|
||||||
@ -51,13 +56,16 @@ namespace repository_01 {
|
|||||||
public IConfiguration Configuration { get; }
|
public IConfiguration Configuration { get; }
|
||||||
public static IFreeSql Fsql { get; private set; }
|
public static IFreeSql Fsql { get; private set; }
|
||||||
|
|
||||||
public void ConfigureServices(IServiceCollection services) {
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
{
|
||||||
|
|
||||||
//services.AddTransient(s => s.)
|
//services.AddTransient(s => s.)
|
||||||
|
|
||||||
services.AddMvc();
|
services.AddMvc();
|
||||||
services.AddSwaggerGen(options => {
|
services.AddSwaggerGen(options =>
|
||||||
options.SwaggerDoc("v1", new Info {
|
{
|
||||||
|
options.SwaggerDoc("v1", new Info
|
||||||
|
{
|
||||||
Version = "v1",
|
Version = "v1",
|
||||||
Title = "FreeSql.RESTful API"
|
Title = "FreeSql.RESTful API"
|
||||||
});
|
});
|
||||||
@ -66,14 +74,16 @@ namespace repository_01 {
|
|||||||
|
|
||||||
services.AddSingleton<IFreeSql>(Fsql);
|
services.AddSingleton<IFreeSql>(Fsql);
|
||||||
|
|
||||||
services.AddFreeRepository(filter => {
|
services.AddFreeRepository(filter =>
|
||||||
|
{
|
||||||
filter
|
filter
|
||||||
//.Apply<Song>("test", a => a.Title == DateTime.Now.ToString() + System.Threading.Thread.CurrentThread.ManagedThreadId)
|
//.Apply<Song>("test", a => a.Title == DateTime.Now.ToString() + System.Threading.Thread.CurrentThread.ManagedThreadId)
|
||||||
.Apply<ISoftDelete>("softdelete", a => a.IsDeleted == false);
|
.Apply<ISoftDelete>("softdelete", a => a.IsDeleted == false);
|
||||||
}, this.GetType().Assembly);
|
}, this.GetType().Assembly);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
|
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
|
||||||
Console.InputEncoding = Encoding.GetEncoding("GB2312");
|
Console.InputEncoding = Encoding.GetEncoding("GB2312");
|
||||||
@ -86,13 +96,15 @@ namespace repository_01 {
|
|||||||
app.UseMvc();
|
app.UseMvc();
|
||||||
|
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI(c => {
|
app.UseSwaggerUI(c =>
|
||||||
|
{
|
||||||
c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1");
|
c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ISoftDelete {
|
public interface ISoftDelete
|
||||||
|
{
|
||||||
bool IsDeleted { get; set; }
|
bool IsDeleted { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,46 +4,55 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace restful.Controllers {
|
namespace restful.Controllers
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
[Route("restapi/[controller]")]
|
[Route("restapi/[controller]")]
|
||||||
public class SongsController : Controller {
|
public class SongsController : Controller
|
||||||
|
{
|
||||||
|
|
||||||
IFreeSql _fsql;
|
IFreeSql _fsql;
|
||||||
|
|
||||||
public SongsController(IFreeSql fsql) {
|
public SongsController(IFreeSql fsql)
|
||||||
|
{
|
||||||
_fsql = fsql;
|
_fsql = fsql;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public Task<List<Song>> GetItems([FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int limit = 20) {
|
public Task<List<Song>> GetItems([FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int limit = 20)
|
||||||
|
{
|
||||||
return _fsql.Select<Song>().WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync();
|
return _fsql.Select<Song>().WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public Task<Song> GetItem([FromRoute] int id) {
|
public Task<Song> GetItem([FromRoute] int id)
|
||||||
|
{
|
||||||
return _fsql.Select<Song>().Where(a => a.Id == id).ToOneAsync();
|
return _fsql.Select<Song>().Where(a => a.Id == id).ToOneAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ModelSong {
|
public class ModelSong
|
||||||
|
{
|
||||||
public string title { get; set; }
|
public string title { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost, ProducesResponseType(201)]
|
[HttpPost, ProducesResponseType(201)]
|
||||||
async public Task<Song> Create([FromBody] ModelSong model) {
|
async public Task<Song> Create([FromBody] ModelSong model)
|
||||||
|
{
|
||||||
var ret = await _fsql.Insert<Song>().AppendData(new Song { Title = model.title }).ExecuteInsertedAsync();
|
var ret = await _fsql.Insert<Song>().AppendData(new Song { Title = model.title }).ExecuteInsertedAsync();
|
||||||
return ret.FirstOrDefault();
|
return ret.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
async public Task<Song> Update([FromRoute] int id, [FromBody] ModelSong model) {
|
async public Task<Song> Update([FromRoute] int id, [FromBody] ModelSong model)
|
||||||
|
{
|
||||||
var ret = await _fsql.Update<Song>().SetSource(new Song { Id = id, Title = model.title }).ExecuteUpdatedAsync();
|
var ret = await _fsql.Update<Song>().SetSource(new Song { Id = id, Title = model.title }).ExecuteUpdatedAsync();
|
||||||
return ret.FirstOrDefault();
|
return ret.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPatch("{id}")]
|
[HttpPatch("{id}")]
|
||||||
async public Task<Song> UpdateDiy([FromRoute] int id, [FromForm] string title) {
|
async public Task<Song> UpdateDiy([FromRoute] int id, [FromForm] string title)
|
||||||
|
{
|
||||||
var up = _fsql.Update<Song>().Where(a => a.Id == id);
|
var up = _fsql.Update<Song>().Where(a => a.Id == id);
|
||||||
if (!string.IsNullOrEmpty(title)) up.Set(a => a.Title, title);
|
if (!string.IsNullOrEmpty(title)) up.Set(a => a.Title, title);
|
||||||
var ret = await up.ExecuteUpdatedAsync();
|
var ret = await up.ExecuteUpdatedAsync();
|
||||||
@ -51,7 +60,8 @@ namespace restful.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpDelete("{id}"), ProducesResponseType(204)]
|
[HttpDelete("{id}"), ProducesResponseType(204)]
|
||||||
async public Task<Song> Delete([FromRoute] int id) {
|
async public Task<Song> Delete([FromRoute] int id)
|
||||||
|
{
|
||||||
var ret = await _fsql.Delete<Song>().Where(a => a.Id == id).ExecuteDeletedAsync();
|
var ret = await _fsql.Delete<Song>().Where(a => a.Id == id).ExecuteDeletedAsync();
|
||||||
return ret.FirstOrDefault();
|
return ret.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
|
|
||||||
namespace restful.Entitys {
|
namespace restful.Entitys
|
||||||
public class Song {
|
{
|
||||||
|
public class Song
|
||||||
|
{
|
||||||
|
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
@ -7,9 +7,12 @@ using Swashbuckle.AspNetCore.Swagger;
|
|||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace restful {
|
namespace restful
|
||||||
public class Startup {
|
{
|
||||||
public Startup(IConfiguration configuration, ILoggerFactory loggerFactory) {
|
public class Startup
|
||||||
|
{
|
||||||
|
public Startup(IConfiguration configuration, ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
Configuration = configuration;
|
Configuration = configuration;
|
||||||
|
|
||||||
Fsql = new FreeSql.FreeSqlBuilder()
|
Fsql = new FreeSql.FreeSqlBuilder()
|
||||||
@ -17,8 +20,10 @@ namespace restful {
|
|||||||
.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
Fsql.Aop.CurdAfter = (s, e) => {
|
Fsql.Aop.CurdAfter = (s, e) =>
|
||||||
if (e.ElapsedMilliseconds > 200) {
|
{
|
||||||
|
if (e.ElapsedMilliseconds > 200)
|
||||||
|
{
|
||||||
//记录日志
|
//记录日志
|
||||||
//发送短信给负责人
|
//发送短信给负责人
|
||||||
}
|
}
|
||||||
@ -33,12 +38,15 @@ namespace restful {
|
|||||||
public IConfiguration Configuration { get; }
|
public IConfiguration Configuration { get; }
|
||||||
public IFreeSql Fsql { get; }
|
public IFreeSql Fsql { get; }
|
||||||
|
|
||||||
public void ConfigureServices(IServiceCollection services) {
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
{
|
||||||
services.AddSingleton<IFreeSql>(Fsql);
|
services.AddSingleton<IFreeSql>(Fsql);
|
||||||
|
|
||||||
services.AddMvc();
|
services.AddMvc();
|
||||||
services.AddSwaggerGen(options => {
|
services.AddSwaggerGen(options =>
|
||||||
options.SwaggerDoc("v1", new Info {
|
{
|
||||||
|
options.SwaggerDoc("v1", new Info
|
||||||
|
{
|
||||||
Version = "v1",
|
Version = "v1",
|
||||||
Title = "FreeSql.RESTful API"
|
Title = "FreeSql.RESTful API"
|
||||||
});
|
});
|
||||||
@ -46,7 +54,8 @@ namespace restful {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
|
{
|
||||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
|
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
|
||||||
Console.InputEncoding = Encoding.GetEncoding("GB2312");
|
Console.InputEncoding = Encoding.GetEncoding("GB2312");
|
||||||
@ -59,7 +68,8 @@ namespace restful {
|
|||||||
app.UseMvc();
|
app.UseMvc();
|
||||||
|
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI(c => {
|
app.UseSwaggerUI(c =>
|
||||||
|
{
|
||||||
c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1");
|
c.SwaggerEndpoint("/swagger/v1/swagger.json", "FreeSql.RESTful API V1");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,15 @@ using System.Collections.Generic;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace FreeSql.Extensions.LazyLoading {
|
namespace FreeSql.Extensions.LazyLoading
|
||||||
|
{
|
||||||
|
|
||||||
public class LazyLoadingComplier {
|
public class LazyLoadingComplier
|
||||||
|
{
|
||||||
|
|
||||||
#if ns20
|
#if ns20
|
||||||
internal static Lazy<CSScriptLib.RoslynEvaluator> _compiler = new Lazy<CSScriptLib.RoslynEvaluator>(() => {
|
internal static Lazy<CSScriptLib.RoslynEvaluator> _compiler = new Lazy<CSScriptLib.RoslynEvaluator>(() =>
|
||||||
|
{
|
||||||
//var dlls = Directory.GetFiles(Directory.GetParent(Type.GetType("IFreeSql, FreeSql").Assembly.Location).FullName, "*.dll");
|
//var dlls = Directory.GetFiles(Directory.GetParent(Type.GetType("IFreeSql, FreeSql").Assembly.Location).FullName, "*.dll");
|
||||||
var compiler = new CSScriptLib.RoslynEvaluator();
|
var compiler = new CSScriptLib.RoslynEvaluator();
|
||||||
compiler.DisableReferencingFromCode = false;
|
compiler.DisableReferencingFromCode = false;
|
||||||
@ -26,7 +29,8 @@ namespace FreeSql.Extensions.LazyLoading {
|
|||||||
return compiler;
|
return compiler;
|
||||||
});
|
});
|
||||||
|
|
||||||
public static Assembly CompileCode(string cscode) {
|
public static Assembly CompileCode(string cscode)
|
||||||
|
{
|
||||||
return _compiler.Value.CompileCode(cscode);
|
return _compiler.Value.CompileCode(cscode);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -5,8 +5,10 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public abstract partial class DbContext : IDisposable {
|
{
|
||||||
|
public abstract partial class DbContext : IDisposable
|
||||||
|
{
|
||||||
|
|
||||||
internal IFreeSql _orm;
|
internal IFreeSql _orm;
|
||||||
internal IFreeSql _fsql => _orm ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
|
internal IFreeSql _fsql => _orm ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql");
|
||||||
@ -20,8 +22,10 @@ namespace FreeSql {
|
|||||||
public IUnitOfWork UnitOfWork => _uow;
|
public IUnitOfWork UnitOfWork => _uow;
|
||||||
|
|
||||||
DbContextOptions _options;
|
DbContextOptions _options;
|
||||||
internal DbContextOptions Options {
|
internal DbContextOptions Options
|
||||||
get {
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
if (_options != null) return _options;
|
if (_options != null) return _options;
|
||||||
if (FreeSqlDbContextExtenssions._dicSetDbContextOptions.TryGetValue(Orm, out _options)) return _options;
|
if (FreeSqlDbContextExtenssions._dicSetDbContextOptions.TryGetValue(Orm, out _options)) return _options;
|
||||||
_options = new DbContextOptions();
|
_options = new DbContextOptions();
|
||||||
@ -30,7 +34,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ConcurrentDictionary<Type, PropertyInfo[]> _dicGetDbSetProps = new ConcurrentDictionary<Type, PropertyInfo[]>();
|
static ConcurrentDictionary<Type, PropertyInfo[]> _dicGetDbSetProps = new ConcurrentDictionary<Type, PropertyInfo[]>();
|
||||||
protected DbContext() {
|
protected DbContext()
|
||||||
|
{
|
||||||
|
|
||||||
var builder = new DbContextOptionsBuilder();
|
var builder = new DbContextOptionsBuilder();
|
||||||
OnConfiguring(builder);
|
OnConfiguring(builder);
|
||||||
@ -39,13 +44,15 @@ namespace FreeSql {
|
|||||||
if (_orm != null) InitPropSets();
|
if (_orm != null) InitPropSets();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void InitPropSets() {
|
internal void InitPropSets()
|
||||||
|
{
|
||||||
var props = _dicGetDbSetProps.GetOrAdd(this.GetType(), tp =>
|
var props = _dicGetDbSetProps.GetOrAdd(this.GetType(), tp =>
|
||||||
tp.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
|
tp.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
|
||||||
.Where(a => a.PropertyType.IsGenericType &&
|
.Where(a => a.PropertyType.IsGenericType &&
|
||||||
a.PropertyType == typeof(DbSet<>).MakeGenericType(a.PropertyType.GenericTypeArguments[0])).ToArray());
|
a.PropertyType == typeof(DbSet<>).MakeGenericType(a.PropertyType.GenericTypeArguments[0])).ToArray());
|
||||||
|
|
||||||
foreach (var prop in props) {
|
foreach (var prop in props)
|
||||||
|
{
|
||||||
var set = this.Set(prop.PropertyType.GenericTypeArguments[0]);
|
var set = this.Set(prop.PropertyType.GenericTypeArguments[0]);
|
||||||
|
|
||||||
prop.SetValue(this, set);
|
prop.SetValue(this, set);
|
||||||
@ -53,13 +60,15 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnConfiguring(DbContextOptionsBuilder builder) {
|
protected virtual void OnConfiguring(DbContextOptionsBuilder builder)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Dictionary<Type, IDbSet> _dicSet = new Dictionary<Type, IDbSet>();
|
protected Dictionary<Type, IDbSet> _dicSet = new Dictionary<Type, IDbSet>();
|
||||||
public DbSet<TEntity> Set<TEntity>() where TEntity : class => this.Set(typeof(TEntity)) as DbSet<TEntity>;
|
public DbSet<TEntity> Set<TEntity>() where TEntity : class => this.Set(typeof(TEntity)) as DbSet<TEntity>;
|
||||||
public virtual IDbSet Set(Type entityType) {
|
public virtual IDbSet Set(Type entityType)
|
||||||
|
{
|
||||||
if (_dicSet.ContainsKey(entityType)) return _dicSet[entityType];
|
if (_dicSet.ContainsKey(entityType)) return _dicSet[entityType];
|
||||||
var sd = Activator.CreateInstance(typeof(DbContextDbSet<>).MakeGenericType(entityType), this) as IDbSet;
|
var sd = Activator.CreateInstance(typeof(DbContextDbSet<>).MakeGenericType(entityType), this) as IDbSet;
|
||||||
if (entityType != typeof(object)) _dicSet.Add(entityType, sd);
|
if (entityType != typeof(object)) _dicSet.Add(entityType, sd);
|
||||||
@ -113,7 +122,8 @@ namespace FreeSql {
|
|||||||
public void AttachRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AttachRange(data);
|
public void AttachRange<TEntity>(IEnumerable<TEntity> data) where TEntity : class => this.Set<TEntity>().AttachRange(data);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
internal class ExecCommandInfo {
|
internal class ExecCommandInfo
|
||||||
|
{
|
||||||
public ExecCommandInfoType actionType { get; set; }
|
public ExecCommandInfoType actionType { get; set; }
|
||||||
public IDbSet dbSet { get; set; }
|
public IDbSet dbSet { get; set; }
|
||||||
public Type stateType { get; set; }
|
public Type stateType { get; set; }
|
||||||
@ -123,29 +133,37 @@ namespace FreeSql {
|
|||||||
Queue<ExecCommandInfo> _actions = new Queue<ExecCommandInfo>();
|
Queue<ExecCommandInfo> _actions = new Queue<ExecCommandInfo>();
|
||||||
internal int _affrows = 0;
|
internal int _affrows = 0;
|
||||||
|
|
||||||
internal void EnqueueAction(ExecCommandInfoType actionType, IDbSet dbSet, Type stateType, object state) {
|
internal void EnqueueAction(ExecCommandInfoType actionType, IDbSet dbSet, Type stateType, object state)
|
||||||
|
{
|
||||||
_actions.Enqueue(new ExecCommandInfo { actionType = actionType, dbSet = dbSet, stateType = stateType, state = state });
|
_actions.Enqueue(new ExecCommandInfo { actionType = actionType, dbSet = dbSet, stateType = stateType, state = state });
|
||||||
}
|
}
|
||||||
|
|
||||||
~DbContext() {
|
~DbContext()
|
||||||
|
{
|
||||||
this.Dispose();
|
this.Dispose();
|
||||||
}
|
}
|
||||||
bool _isdisposed = false;
|
bool _isdisposed = false;
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
if (_isdisposed) return;
|
if (_isdisposed) return;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
_actions.Clear();
|
_actions.Clear();
|
||||||
|
|
||||||
foreach (var set in _dicSet)
|
foreach (var set in _dicSet)
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
set.Value.Dispose();
|
set.Value.Dispose();
|
||||||
} catch { }
|
}
|
||||||
|
catch { }
|
||||||
|
|
||||||
_dicSet.Clear();
|
_dicSet.Clear();
|
||||||
AllSets.Clear();
|
AllSets.Clear();
|
||||||
|
|
||||||
_uow?.Rollback();
|
_uow?.Rollback();
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
_isdisposed = true;
|
_isdisposed = true;
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,13 @@ using System.Reflection;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
partial class DbContext {
|
{
|
||||||
|
partial class DbContext
|
||||||
|
{
|
||||||
|
|
||||||
async public virtual Task<int> SaveChangesAsync() {
|
async public virtual Task<int> SaveChangesAsync()
|
||||||
|
{
|
||||||
await ExecCommandAsync();
|
await ExecCommandAsync();
|
||||||
_uow?.Commit();
|
_uow?.Commit();
|
||||||
var ret = _affrows;
|
var ret = _affrows;
|
||||||
@ -17,7 +20,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>> _dicExecCommandDbContextBetchAsync = new Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>>();
|
static Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>> _dicExecCommandDbContextBetchAsync = new Dictionary<Type, Dictionary<string, Func<object, object[], Task<int>>>>();
|
||||||
async internal Task ExecCommandAsync() {
|
async internal Task ExecCommandAsync()
|
||||||
|
{
|
||||||
if (isExecCommanding) return;
|
if (isExecCommanding) return;
|
||||||
if (_actions.Any() == false) return;
|
if (_actions.Any() == false) return;
|
||||||
isExecCommanding = true;
|
isExecCommanding = true;
|
||||||
@ -25,10 +29,12 @@ namespace FreeSql {
|
|||||||
ExecCommandInfo oldinfo = null;
|
ExecCommandInfo oldinfo = null;
|
||||||
var states = new List<object>();
|
var states = new List<object>();
|
||||||
|
|
||||||
Func<string, Task<int>> dbContextBetch = methodName => {
|
Func<string, Task<int>> dbContextBetch = methodName =>
|
||||||
|
{
|
||||||
if (_dicExecCommandDbContextBetchAsync.TryGetValue(oldinfo.stateType, out var trydic) == false)
|
if (_dicExecCommandDbContextBetchAsync.TryGetValue(oldinfo.stateType, out var trydic) == false)
|
||||||
trydic = new Dictionary<string, Func<object, object[], Task<int>>>();
|
trydic = new Dictionary<string, Func<object, object[], Task<int>>>();
|
||||||
if (trydic.TryGetValue(methodName, out var tryfunc) == false) {
|
if (trydic.TryGetValue(methodName, out var tryfunc) == false)
|
||||||
|
{
|
||||||
var arrType = oldinfo.stateType.MakeArrayType();
|
var arrType = oldinfo.stateType.MakeArrayType();
|
||||||
var dbsetType = oldinfo.dbSet.GetType().BaseType;
|
var dbsetType = oldinfo.dbSet.GetType().BaseType;
|
||||||
var dbsetTypeMethod = dbsetType.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { arrType }, null);
|
var dbsetTypeMethod = dbsetType.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { arrType }, null);
|
||||||
@ -47,28 +53,34 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
return tryfunc(oldinfo.dbSet, states.ToArray());
|
return tryfunc(oldinfo.dbSet, states.ToArray());
|
||||||
};
|
};
|
||||||
Func<Task> funcDelete = async () => {
|
Func<Task> funcDelete = async () =>
|
||||||
|
{
|
||||||
_affrows += await dbContextBetch("DbContextBetchRemoveAsync");
|
_affrows += await dbContextBetch("DbContextBetchRemoveAsync");
|
||||||
states.Clear();
|
states.Clear();
|
||||||
};
|
};
|
||||||
Func<Task> funcInsert = async () => {
|
Func<Task> funcInsert = async () =>
|
||||||
|
{
|
||||||
_affrows += await dbContextBetch("DbContextBetchAddAsync");
|
_affrows += await dbContextBetch("DbContextBetchAddAsync");
|
||||||
states.Clear();
|
states.Clear();
|
||||||
};
|
};
|
||||||
Func<bool, Task> funcUpdate = async (isLiveUpdate) => {
|
Func<bool, Task> funcUpdate = async (isLiveUpdate) =>
|
||||||
|
{
|
||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
if (isLiveUpdate) affrows = await dbContextBetch("DbContextBetchUpdateNowAsync");
|
if (isLiveUpdate) affrows = await dbContextBetch("DbContextBetchUpdateNowAsync");
|
||||||
else affrows = await dbContextBetch("DbContextBetchUpdateAsync");
|
else affrows = await dbContextBetch("DbContextBetchUpdateAsync");
|
||||||
if (affrows == -999) { //最后一个元素已被删除
|
if (affrows == -999)
|
||||||
|
{ //最后一个元素已被删除
|
||||||
states.RemoveAt(states.Count - 1);
|
states.RemoveAt(states.Count - 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (affrows == -998 || affrows == -997) { //没有执行更新
|
if (affrows == -998 || affrows == -997)
|
||||||
|
{ //没有执行更新
|
||||||
var laststate = states[states.Count - 1];
|
var laststate = states[states.Count - 1];
|
||||||
states.Clear();
|
states.Clear();
|
||||||
if (affrows == -997) states.Add(laststate); //保留最后一个
|
if (affrows == -997) states.Add(laststate); //保留最后一个
|
||||||
}
|
}
|
||||||
if (affrows > 0) {
|
if (affrows > 0)
|
||||||
|
{
|
||||||
_affrows += affrows;
|
_affrows += affrows;
|
||||||
var islastNotUpdated = states.Count != affrows;
|
var islastNotUpdated = states.Count != affrows;
|
||||||
var laststate = states[states.Count - 1];
|
var laststate = states[states.Count - 1];
|
||||||
@ -77,22 +89,26 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
while (_actions.Any() || states.Any()) {
|
while (_actions.Any() || states.Any())
|
||||||
|
{
|
||||||
var info = _actions.Any() ? _actions.Dequeue() : null;
|
var info = _actions.Any() ? _actions.Dequeue() : null;
|
||||||
if (oldinfo == null) oldinfo = info;
|
if (oldinfo == null) oldinfo = info;
|
||||||
var isLiveUpdate = false;
|
var isLiveUpdate = false;
|
||||||
|
|
||||||
if (_actions.Any() == false && states.Any() ||
|
if (_actions.Any() == false && states.Any() ||
|
||||||
info != null && oldinfo.actionType != info.actionType ||
|
info != null && oldinfo.actionType != info.actionType ||
|
||||||
info != null && oldinfo.stateType != info.stateType) {
|
info != null && oldinfo.stateType != info.stateType)
|
||||||
|
{
|
||||||
|
|
||||||
if (info != null && oldinfo.actionType == info.actionType && oldinfo.stateType == info.stateType) {
|
if (info != null && oldinfo.actionType == info.actionType && oldinfo.stateType == info.stateType)
|
||||||
|
{
|
||||||
//最后一个,合起来发送
|
//最后一个,合起来发送
|
||||||
states.Add(info.state);
|
states.Add(info.state);
|
||||||
info = null;
|
info = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (oldinfo.actionType) {
|
switch (oldinfo.actionType)
|
||||||
|
{
|
||||||
case ExecCommandInfoType.Insert:
|
case ExecCommandInfoType.Insert:
|
||||||
await funcInsert();
|
await funcInsert();
|
||||||
break;
|
break;
|
||||||
@ -103,12 +119,14 @@ namespace FreeSql {
|
|||||||
isLiveUpdate = true;
|
isLiveUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update) {
|
if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update)
|
||||||
|
{
|
||||||
if (states.Any())
|
if (states.Any())
|
||||||
await funcUpdate(isLiveUpdate);
|
await funcUpdate(isLiveUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info != null) {
|
if (info != null)
|
||||||
|
{
|
||||||
states.Add(info.state);
|
states.Add(info.state);
|
||||||
oldinfo = info;
|
oldinfo = info;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public class DbContextOptions {
|
{
|
||||||
|
public class DbContextOptions
|
||||||
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否开启一对多,联级保存功能
|
/// 是否开启一对多,联级保存功能
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
|
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public class DbContextOptionsBuilder {
|
{
|
||||||
|
public class DbContextOptionsBuilder
|
||||||
|
{
|
||||||
|
|
||||||
internal IFreeSql _fsql;
|
internal IFreeSql _fsql;
|
||||||
|
|
||||||
public DbContextOptionsBuilder UseFreeSql(IFreeSql orm) {
|
public DbContextOptionsBuilder UseFreeSql(IFreeSql orm)
|
||||||
|
{
|
||||||
_fsql = orm;
|
_fsql = orm;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,13 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
partial class DbContext {
|
{
|
||||||
|
partial class DbContext
|
||||||
|
{
|
||||||
|
|
||||||
public virtual int SaveChanges() {
|
public virtual int SaveChanges()
|
||||||
|
{
|
||||||
ExecCommand();
|
ExecCommand();
|
||||||
_uow?.Commit();
|
_uow?.Commit();
|
||||||
var ret = _affrows;
|
var ret = _affrows;
|
||||||
@ -17,7 +20,8 @@ namespace FreeSql {
|
|||||||
|
|
||||||
static Dictionary<Type, Dictionary<string, Func<object, object[], int>>> _dicExecCommandDbContextBetch = new Dictionary<Type, Dictionary<string, Func<object, object[], int>>>();
|
static Dictionary<Type, Dictionary<string, Func<object, object[], int>>> _dicExecCommandDbContextBetch = new Dictionary<Type, Dictionary<string, Func<object, object[], int>>>();
|
||||||
bool isExecCommanding = false;
|
bool isExecCommanding = false;
|
||||||
internal void ExecCommand() {
|
internal void ExecCommand()
|
||||||
|
{
|
||||||
if (isExecCommanding) return;
|
if (isExecCommanding) return;
|
||||||
if (_actions.Any() == false) return;
|
if (_actions.Any() == false) return;
|
||||||
isExecCommanding = true;
|
isExecCommanding = true;
|
||||||
@ -25,10 +29,12 @@ namespace FreeSql {
|
|||||||
ExecCommandInfo oldinfo = null;
|
ExecCommandInfo oldinfo = null;
|
||||||
var states = new List<object>();
|
var states = new List<object>();
|
||||||
|
|
||||||
Func<string, int> dbContextBetch = methodName => {
|
Func<string, int> dbContextBetch = methodName =>
|
||||||
|
{
|
||||||
if (_dicExecCommandDbContextBetch.TryGetValue(oldinfo.stateType, out var trydic) == false)
|
if (_dicExecCommandDbContextBetch.TryGetValue(oldinfo.stateType, out var trydic) == false)
|
||||||
trydic = new Dictionary<string, Func<object, object[], int>>();
|
trydic = new Dictionary<string, Func<object, object[], int>>();
|
||||||
if (trydic.TryGetValue(methodName, out var tryfunc) == false) {
|
if (trydic.TryGetValue(methodName, out var tryfunc) == false)
|
||||||
|
{
|
||||||
var arrType = oldinfo.stateType.MakeArrayType();
|
var arrType = oldinfo.stateType.MakeArrayType();
|
||||||
var dbsetType = oldinfo.dbSet.GetType().BaseType;
|
var dbsetType = oldinfo.dbSet.GetType().BaseType;
|
||||||
var dbsetTypeMethod = dbsetType.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { arrType }, null);
|
var dbsetTypeMethod = dbsetType.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { arrType }, null);
|
||||||
@ -47,28 +53,34 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
return tryfunc(oldinfo.dbSet, states.ToArray());
|
return tryfunc(oldinfo.dbSet, states.ToArray());
|
||||||
};
|
};
|
||||||
Action funcDelete = () => {
|
Action funcDelete = () =>
|
||||||
|
{
|
||||||
_affrows += dbContextBetch("DbContextBetchRemove");
|
_affrows += dbContextBetch("DbContextBetchRemove");
|
||||||
states.Clear();
|
states.Clear();
|
||||||
};
|
};
|
||||||
Action funcInsert = () => {
|
Action funcInsert = () =>
|
||||||
|
{
|
||||||
_affrows += dbContextBetch("DbContextBetchAdd");
|
_affrows += dbContextBetch("DbContextBetchAdd");
|
||||||
states.Clear();
|
states.Clear();
|
||||||
};
|
};
|
||||||
Action<bool> funcUpdate = isLiveUpdate => {
|
Action<bool> funcUpdate = isLiveUpdate =>
|
||||||
|
{
|
||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
if (isLiveUpdate) affrows = dbContextBetch("DbContextBetchUpdateNow");
|
if (isLiveUpdate) affrows = dbContextBetch("DbContextBetchUpdateNow");
|
||||||
else affrows = dbContextBetch("DbContextBetchUpdate");
|
else affrows = dbContextBetch("DbContextBetchUpdate");
|
||||||
if (affrows == -999) { //最后一个元素已被删除
|
if (affrows == -999)
|
||||||
|
{ //最后一个元素已被删除
|
||||||
states.RemoveAt(states.Count - 1);
|
states.RemoveAt(states.Count - 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (affrows == -998 || affrows == -997) { //没有执行更新
|
if (affrows == -998 || affrows == -997)
|
||||||
|
{ //没有执行更新
|
||||||
var laststate = states[states.Count - 1];
|
var laststate = states[states.Count - 1];
|
||||||
states.Clear();
|
states.Clear();
|
||||||
if (affrows == -997) states.Add(laststate); //保留最后一个
|
if (affrows == -997) states.Add(laststate); //保留最后一个
|
||||||
}
|
}
|
||||||
if (affrows > 0) {
|
if (affrows > 0)
|
||||||
|
{
|
||||||
_affrows += affrows;
|
_affrows += affrows;
|
||||||
var islastNotUpdated = states.Count != affrows;
|
var islastNotUpdated = states.Count != affrows;
|
||||||
var laststate = states[states.Count - 1];
|
var laststate = states[states.Count - 1];
|
||||||
@ -77,22 +89,26 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
while (_actions.Any() || states.Any()) {
|
while (_actions.Any() || states.Any())
|
||||||
|
{
|
||||||
var info = _actions.Any() ? _actions.Dequeue() : null;
|
var info = _actions.Any() ? _actions.Dequeue() : null;
|
||||||
if (oldinfo == null) oldinfo = info;
|
if (oldinfo == null) oldinfo = info;
|
||||||
var isLiveUpdate = false;
|
var isLiveUpdate = false;
|
||||||
|
|
||||||
if (_actions.Any() == false && states.Any() ||
|
if (_actions.Any() == false && states.Any() ||
|
||||||
info != null && oldinfo.actionType != info.actionType ||
|
info != null && oldinfo.actionType != info.actionType ||
|
||||||
info != null && oldinfo.stateType != info.stateType) {
|
info != null && oldinfo.stateType != info.stateType)
|
||||||
|
{
|
||||||
|
|
||||||
if (info != null && oldinfo.actionType == info.actionType && oldinfo.stateType == info.stateType) {
|
if (info != null && oldinfo.actionType == info.actionType && oldinfo.stateType == info.stateType)
|
||||||
|
{
|
||||||
//最后一个,合起来发送
|
//最后一个,合起来发送
|
||||||
states.Add(info.state);
|
states.Add(info.state);
|
||||||
info = null;
|
info = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (oldinfo.actionType) {
|
switch (oldinfo.actionType)
|
||||||
|
{
|
||||||
case ExecCommandInfoType.Insert:
|
case ExecCommandInfoType.Insert:
|
||||||
funcInsert();
|
funcInsert();
|
||||||
break;
|
break;
|
||||||
@ -103,12 +119,14 @@ namespace FreeSql {
|
|||||||
isLiveUpdate = true;
|
isLiveUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update) {
|
if (isLiveUpdate || oldinfo.actionType == ExecCommandInfoType.Update)
|
||||||
|
{
|
||||||
if (states.Any())
|
if (states.Any())
|
||||||
funcUpdate(isLiveUpdate);
|
funcUpdate(isLiveUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info != null) {
|
if (info != null)
|
||||||
|
{
|
||||||
states.Add(info.state);
|
states.Add(info.state);
|
||||||
oldinfo = info;
|
oldinfo = info;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public class FreeContext : DbContext {
|
{
|
||||||
|
public class FreeContext : DbContext
|
||||||
|
{
|
||||||
|
|
||||||
public FreeContext(IFreeSql orm) {
|
public FreeContext(IFreeSql orm)
|
||||||
|
{
|
||||||
_orm = orm;
|
_orm = orm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,41 +8,52 @@ using System.Linq;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
|
||||||
internal class DbContextDbSet<TEntity> : DbSet<TEntity> where TEntity : class {
|
internal class DbContextDbSet<TEntity> : DbSet<TEntity> where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
public DbContextDbSet(DbContext ctx) {
|
public DbContextDbSet(DbContext ctx)
|
||||||
|
{
|
||||||
_ctx = ctx;
|
_ctx = ctx;
|
||||||
_uow = ctx._uow;
|
_uow = ctx._uow;
|
||||||
_fsql = ctx._fsql;
|
_fsql = ctx._fsql;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IDbSet : IDisposable {
|
public interface IDbSet : IDisposable
|
||||||
|
{
|
||||||
Type EntityType { get; }
|
Type EntityType { get; }
|
||||||
}
|
}
|
||||||
public abstract partial class DbSet<TEntity> : IDbSet where TEntity : class {
|
public abstract partial class DbSet<TEntity> : IDbSet where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
internal DbContext _ctx;
|
internal DbContext _ctx;
|
||||||
internal IUnitOfWork _uow;
|
internal IUnitOfWork _uow;
|
||||||
internal IFreeSql _fsql;
|
internal IFreeSql _fsql;
|
||||||
|
|
||||||
protected virtual ISelect<TEntity> OrmSelect(object dywhere) {
|
protected virtual ISelect<TEntity> OrmSelect(object dywhere)
|
||||||
|
{
|
||||||
DbContextExecCommand(); //查询前先提交,否则会出脏读
|
DbContextExecCommand(); //查询前先提交,否则会出脏读
|
||||||
return _fsql.Select<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
|
return _fsql.Select<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
|
||||||
}
|
}
|
||||||
|
|
||||||
~DbSet() {
|
~DbSet()
|
||||||
|
{
|
||||||
this.Dispose();
|
this.Dispose();
|
||||||
}
|
}
|
||||||
bool _isdisposed = false;
|
bool _isdisposed = false;
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
if (_isdisposed) return;
|
if (_isdisposed) return;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
this._dicUpdateTimes.Clear();
|
this._dicUpdateTimes.Clear();
|
||||||
this._states.Clear();
|
this._states.Clear();
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
_isdisposed = true;
|
_isdisposed = true;
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
@ -55,20 +66,25 @@ namespace FreeSql {
|
|||||||
protected virtual IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys) => _fsql.Update<TEntity>().AsType(_entityType).SetSource(entitys).WithTransaction(_uow?.GetOrBeginTransaction());
|
protected virtual IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys) => _fsql.Update<TEntity>().AsType(_entityType).SetSource(entitys).WithTransaction(_uow?.GetOrBeginTransaction());
|
||||||
protected virtual IDelete<TEntity> OrmDelete(object dywhere) => _fsql.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
|
protected virtual IDelete<TEntity> OrmDelete(object dywhere) => _fsql.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
|
||||||
|
|
||||||
internal void EnqueueToDbContext(DbContext.ExecCommandInfoType actionType, EntityState state) {
|
internal void EnqueueToDbContext(DbContext.ExecCommandInfoType actionType, EntityState state)
|
||||||
|
{
|
||||||
_ctx.EnqueueAction(actionType, this, typeof(EntityState), state);
|
_ctx.EnqueueAction(actionType, this, typeof(EntityState), state);
|
||||||
}
|
}
|
||||||
internal void IncrAffrows(int affrows) {
|
internal void IncrAffrows(int affrows)
|
||||||
|
{
|
||||||
_ctx._affrows += affrows;
|
_ctx._affrows += affrows;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void TrackToList(object list) {
|
internal void TrackToList(object list)
|
||||||
|
{
|
||||||
if (list == null) return;
|
if (list == null) return;
|
||||||
var ls = list as IList<TEntity>;
|
var ls = list as IList<TEntity>;
|
||||||
if (ls == null) {
|
if (ls == null)
|
||||||
|
{
|
||||||
var ie = list as IEnumerable;
|
var ie = list as IEnumerable;
|
||||||
if (ie == null) return;
|
if (ie == null) return;
|
||||||
foreach (var item in ie) {
|
foreach (var item in ie)
|
||||||
|
{
|
||||||
if (item == null) return;
|
if (item == null) return;
|
||||||
var itemType = item.GetType();
|
var itemType = item.GetType();
|
||||||
if (itemType == typeof(object)) return;
|
if (itemType == typeof(object)) return;
|
||||||
@ -80,10 +96,12 @@ namespace FreeSql {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var item in ls) {
|
foreach (var item in ls)
|
||||||
|
{
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, item, false);
|
var key = _fsql.GetEntityKeyString(_entityType, item, false);
|
||||||
if (key == null) continue;
|
if (key == null) continue;
|
||||||
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) => {
|
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
|
||||||
|
{
|
||||||
_fsql.MapEntityValue(_entityType, item, ov.Value);
|
_fsql.MapEntityValue(_entityType, item, ov.Value);
|
||||||
ov.Time = DateTime.Now;
|
ov.Time = DateTime.Now;
|
||||||
return ov;
|
return ov;
|
||||||
@ -109,7 +127,8 @@ namespace FreeSql {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="entityType"></param>
|
/// <param name="entityType"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public void AsType(Type entityType) {
|
public void AsType(Type entityType)
|
||||||
|
{
|
||||||
if (entityType == typeof(object)) throw new Exception("ISelect.AsType 参数不支持指定为 object");
|
if (entityType == typeof(object)) throw new Exception("ISelect.AsType 参数不支持指定为 object");
|
||||||
if (entityType == _entityType) return;
|
if (entityType == _entityType) return;
|
||||||
var newtb = _fsql.CodeFirst.GetTableByEntity(entityType);
|
var newtb = _fsql.CodeFirst.GetTableByEntity(entityType);
|
||||||
@ -118,8 +137,10 @@ namespace FreeSql {
|
|||||||
_tableIdentitysPriv = null;
|
_tableIdentitysPriv = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EntityState {
|
public class EntityState
|
||||||
public EntityState(TEntity value, string key) {
|
{
|
||||||
|
public EntityState(TEntity value, string key)
|
||||||
|
{
|
||||||
this.Value = value;
|
this.Value = value;
|
||||||
this.Key = key;
|
this.Key = key;
|
||||||
this.Time = DateTime.Now;
|
this.Time = DateTime.Now;
|
||||||
@ -134,14 +155,17 @@ namespace FreeSql {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void Attach(TEntity data) => AttachRange(new[] { data });
|
public void Attach(TEntity data) => AttachRange(new[] { data });
|
||||||
public void AttachRange(IEnumerable<TEntity> data) {
|
public void AttachRange(IEnumerable<TEntity> data)
|
||||||
|
{
|
||||||
if (data == null || data.Any() == false) return;
|
if (data == null || data.Any() == false) return;
|
||||||
if (_table.Primarys.Any() == false) throw new Exception($"不可附加,实体没有主键:{_fsql.GetEntityString(_entityType, data.First())}");
|
if (_table.Primarys.Any() == false) throw new Exception($"不可附加,实体没有主键:{_fsql.GetEntityString(_entityType, data.First())}");
|
||||||
foreach (var item in data) {
|
foreach (var item in data)
|
||||||
|
{
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, item, false);
|
var key = _fsql.GetEntityKeyString(_entityType, item, false);
|
||||||
if (string.IsNullOrEmpty(key)) throw new Exception($"不可附加,未设置主键的值:{_fsql.GetEntityString(_entityType, item)}");
|
if (string.IsNullOrEmpty(key)) throw new Exception($"不可附加,未设置主键的值:{_fsql.GetEntityString(_entityType, item)}");
|
||||||
|
|
||||||
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) => {
|
_states.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
|
||||||
|
{
|
||||||
_fsql.MapEntityValue(_entityType, item, ov.Value);
|
_fsql.MapEntityValue(_entityType, item, ov.Value);
|
||||||
ov.Time = DateTime.Now;
|
ov.Time = DateTime.Now;
|
||||||
return ov;
|
return ov;
|
||||||
@ -151,27 +175,32 @@ namespace FreeSql {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清空状态数据
|
/// 清空状态数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void FlushState() {
|
public void FlushState()
|
||||||
|
{
|
||||||
_states.Clear();
|
_states.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Utils
|
#region Utils
|
||||||
EntityState CreateEntityState(TEntity data) {
|
EntityState CreateEntityState(TEntity data)
|
||||||
|
{
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
||||||
var state = new EntityState((TEntity)Activator.CreateInstance(_entityType), key);
|
var state = new EntityState((TEntity)Activator.CreateInstance(_entityType), key);
|
||||||
_fsql.MapEntityValue(_entityType, data, state.Value);
|
_fsql.MapEntityValue(_entityType, data, state.Value);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
bool? ExistsInStates(TEntity data) {
|
bool? ExistsInStates(TEntity data)
|
||||||
|
{
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
||||||
if (string.IsNullOrEmpty(key)) return null;
|
if (string.IsNullOrEmpty(key)) return null;
|
||||||
return _states.ContainsKey(key);
|
return _states.ContainsKey(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CanAdd(IEnumerable<TEntity> data, bool isThrow) {
|
bool CanAdd(IEnumerable<TEntity> data, bool isThrow)
|
||||||
if (data == null) {
|
{
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
if (isThrow) throw new ArgumentNullException(nameof(data));
|
if (isThrow) throw new ArgumentNullException(nameof(data));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -179,37 +208,47 @@ namespace FreeSql {
|
|||||||
foreach (var s in data) if (CanAdd(s, isThrow) == false) return false;
|
foreach (var s in data) if (CanAdd(s, isThrow) == false) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool CanAdd(TEntity data, bool isThrow) {
|
bool CanAdd(TEntity data, bool isThrow)
|
||||||
if (data == null) {
|
{
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
if (isThrow) throw new ArgumentNullException(nameof(data));
|
if (isThrow) throw new ArgumentNullException(nameof(data));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_table.Primarys.Any() == false) {
|
if (_table.Primarys.Any() == false)
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可添加,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可添加,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, data, true);
|
var key = _fsql.GetEntityKeyString(_entityType, data, true);
|
||||||
if (string.IsNullOrEmpty(key)) {
|
if (string.IsNullOrEmpty(key))
|
||||||
switch (_fsql.Ado.DataType) {
|
{
|
||||||
|
switch (_fsql.Ado.DataType)
|
||||||
|
{
|
||||||
case DataType.SqlServer:
|
case DataType.SqlServer:
|
||||||
case DataType.PostgreSQL:
|
case DataType.PostgreSQL:
|
||||||
return true;
|
return true;
|
||||||
case DataType.MySql:
|
case DataType.MySql:
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
case DataType.Sqlite:
|
case DataType.Sqlite:
|
||||||
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1) {
|
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (isThrow) throw new Exception($"不可添加,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可添加,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
if (_states.ContainsKey(key)) {
|
else
|
||||||
|
{
|
||||||
|
if (_states.ContainsKey(key))
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可添加,已存在于状态管理:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可添加,已存在于状态管理:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var idval = _fsql.GetEntityIdentityValueWithPrimary(_entityType, data);
|
var idval = _fsql.GetEntityIdentityValueWithPrimary(_entityType, data);
|
||||||
if (idval > 0) {
|
if (idval > 0)
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可添加,自增属性有值:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可添加,自增属性有值:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -217,8 +256,10 @@ namespace FreeSql {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CanUpdate(IEnumerable<TEntity> data, bool isThrow) {
|
bool CanUpdate(IEnumerable<TEntity> data, bool isThrow)
|
||||||
if (data == null) {
|
{
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
if (isThrow) throw new ArgumentNullException(nameof(data));
|
if (isThrow) throw new ArgumentNullException(nameof(data));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -226,29 +267,36 @@ namespace FreeSql {
|
|||||||
foreach (var s in data) if (CanUpdate(s, isThrow) == false) return false;
|
foreach (var s in data) if (CanUpdate(s, isThrow) == false) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool CanUpdate(TEntity data, bool isThrow) {
|
bool CanUpdate(TEntity data, bool isThrow)
|
||||||
if (data == null) {
|
{
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
if (isThrow) throw new ArgumentNullException(nameof(data));
|
if (isThrow) throw new ArgumentNullException(nameof(data));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_table.Primarys.Any() == false) {
|
if (_table.Primarys.Any() == false)
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可更新,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可更新,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
||||||
if (string.IsNullOrEmpty(key)) {
|
if (string.IsNullOrEmpty(key))
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可更新,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可更新,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_states.TryGetValue(key, out var tryval) == false) {
|
if (_states.TryGetValue(key, out var tryval) == false)
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可更新,数据未被跟踪,应该先查询 或者 Attach:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可更新,数据未被跟踪,应该先查询 或者 Attach:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CanRemove(IEnumerable<TEntity> data, bool isThrow) {
|
bool CanRemove(IEnumerable<TEntity> data, bool isThrow)
|
||||||
if (data == null) {
|
{
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
if (isThrow) throw new ArgumentNullException(nameof(data));
|
if (isThrow) throw new ArgumentNullException(nameof(data));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -256,17 +304,21 @@ namespace FreeSql {
|
|||||||
foreach (var s in data) if (CanRemove(s, isThrow) == false) return false;
|
foreach (var s in data) if (CanRemove(s, isThrow) == false) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool CanRemove(TEntity data, bool isThrow) {
|
bool CanRemove(TEntity data, bool isThrow)
|
||||||
if (data == null) {
|
{
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
if (isThrow) throw new ArgumentNullException(nameof(data));
|
if (isThrow) throw new ArgumentNullException(nameof(data));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_table.Primarys.Any() == false) {
|
if (_table.Primarys.Any() == false)
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可删除,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可删除,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
var key = _fsql.GetEntityKeyString(_entityType, data, false);
|
||||||
if (string.IsNullOrEmpty(key)) {
|
if (string.IsNullOrEmpty(key))
|
||||||
|
{
|
||||||
if (isThrow) throw new Exception($"不可删除,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
if (isThrow) throw new Exception($"不可删除,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -6,29 +6,37 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
partial class DbSet<TEntity> {
|
{
|
||||||
|
partial class DbSet<TEntity>
|
||||||
|
{
|
||||||
|
|
||||||
Task DbContextExecCommandAsync() {
|
Task DbContextExecCommandAsync()
|
||||||
|
{
|
||||||
_dicUpdateTimes.Clear();
|
_dicUpdateTimes.Clear();
|
||||||
return _ctx.ExecCommandAsync();
|
return _ctx.ExecCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<int> DbContextBetchAddAsync(EntityState[] adds) {
|
async Task<int> DbContextBetchAddAsync(EntityState[] adds)
|
||||||
|
{
|
||||||
if (adds.Any() == false) return 0;
|
if (adds.Any() == false) return 0;
|
||||||
var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync();
|
var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync();
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Add
|
#region Add
|
||||||
async Task AddPrivAsync(TEntity data, bool isCheck) {
|
async Task AddPrivAsync(TEntity data, bool isCheck)
|
||||||
|
{
|
||||||
if (isCheck && CanAdd(data, true) == false) return;
|
if (isCheck && CanAdd(data, true) == false) return;
|
||||||
if (_tableIdentitys.Length > 0) {
|
if (_tableIdentitys.Length > 0)
|
||||||
|
{
|
||||||
//有自增,马上执行
|
//有自增,马上执行
|
||||||
switch (_fsql.Ado.DataType) {
|
switch (_fsql.Ado.DataType)
|
||||||
|
{
|
||||||
case DataType.SqlServer:
|
case DataType.SqlServer:
|
||||||
case DataType.PostgreSQL:
|
case DataType.PostgreSQL:
|
||||||
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1) {
|
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
|
||||||
|
{
|
||||||
await DbContextExecCommandAsync();
|
await DbContextExecCommandAsync();
|
||||||
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
|
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
|
||||||
IncrAffrows(1);
|
IncrAffrows(1);
|
||||||
@ -36,7 +44,9 @@ namespace FreeSql {
|
|||||||
Attach(data);
|
Attach(data);
|
||||||
if (_ctx.Options.EnableAddOrUpdateNavigateList)
|
if (_ctx.Options.EnableAddOrUpdateNavigateList)
|
||||||
await AddOrUpdateNavigateListAsync(data);
|
await AddOrUpdateNavigateListAsync(data);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
await DbContextExecCommandAsync();
|
await DbContextExecCommandAsync();
|
||||||
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
|
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
|
||||||
IncrAffrows(1);
|
IncrAffrows(1);
|
||||||
@ -49,7 +59,8 @@ namespace FreeSql {
|
|||||||
case DataType.MySql:
|
case DataType.MySql:
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
case DataType.Sqlite:
|
case DataType.Sqlite:
|
||||||
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1) {
|
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
|
||||||
|
{
|
||||||
await DbContextExecCommandAsync();
|
await DbContextExecCommandAsync();
|
||||||
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
|
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
|
||||||
IncrAffrows(1);
|
IncrAffrows(1);
|
||||||
@ -67,15 +78,19 @@ namespace FreeSql {
|
|||||||
await AddOrUpdateNavigateListAsync(data);
|
await AddOrUpdateNavigateListAsync(data);
|
||||||
}
|
}
|
||||||
public Task AddAsync(TEntity data) => AddPrivAsync(data, true);
|
public Task AddAsync(TEntity data) => AddPrivAsync(data, true);
|
||||||
async public Task AddRangeAsync(IEnumerable<TEntity> data) {
|
async public Task AddRangeAsync(IEnumerable<TEntity> data)
|
||||||
|
{
|
||||||
if (CanAdd(data, true) == false) return;
|
if (CanAdd(data, true) == false) return;
|
||||||
if (data.ElementAtOrDefault(1) == default(TEntity)) {
|
if (data.ElementAtOrDefault(1) == default(TEntity))
|
||||||
|
{
|
||||||
await AddAsync(data.First());
|
await AddAsync(data.First());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_tableIdentitys.Length > 0) {
|
if (_tableIdentitys.Length > 0)
|
||||||
|
{
|
||||||
//有自增,马上执行
|
//有自增,马上执行
|
||||||
switch (_fsql.Ado.DataType) {
|
switch (_fsql.Ado.DataType)
|
||||||
|
{
|
||||||
case DataType.SqlServer:
|
case DataType.SqlServer:
|
||||||
case DataType.PostgreSQL:
|
case DataType.PostgreSQL:
|
||||||
await DbContextExecCommandAsync();
|
await DbContextExecCommandAsync();
|
||||||
@ -97,7 +112,9 @@ namespace FreeSql {
|
|||||||
await AddPrivAsync(s, false);
|
await AddPrivAsync(s, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
//进入队列,等待 SaveChanges 时执行
|
//进入队列,等待 SaveChanges 时执行
|
||||||
foreach (var item in data)
|
foreach (var item in data)
|
||||||
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item));
|
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item));
|
||||||
@ -107,25 +124,30 @@ namespace FreeSql {
|
|||||||
await AddOrUpdateNavigateListAsync(item);
|
await AddOrUpdateNavigateListAsync(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async Task AddOrUpdateNavigateListAsync(TEntity item) {
|
async Task AddOrUpdateNavigateListAsync(TEntity item)
|
||||||
|
{
|
||||||
Type itemType = null;
|
Type itemType = null;
|
||||||
foreach (var prop in _table.Properties) {
|
foreach (var prop in _table.Properties)
|
||||||
|
{
|
||||||
if (_table.ColumnsByCsIgnore.ContainsKey(prop.Key)) continue;
|
if (_table.ColumnsByCsIgnore.ContainsKey(prop.Key)) continue;
|
||||||
if (_table.ColumnsByCs.ContainsKey(prop.Key)) continue;
|
if (_table.ColumnsByCs.ContainsKey(prop.Key)) continue;
|
||||||
var tref = _table.GetTableRef(prop.Key, true);
|
var tref = _table.GetTableRef(prop.Key, true);
|
||||||
if (tref == null) continue;
|
if (tref == null) continue;
|
||||||
|
|
||||||
switch (tref.RefType) {
|
switch (tref.RefType)
|
||||||
|
{
|
||||||
case Internal.Model.TableRefType.OneToOne:
|
case Internal.Model.TableRefType.OneToOne:
|
||||||
case Internal.Model.TableRefType.ManyToOne:
|
case Internal.Model.TableRefType.ManyToOne:
|
||||||
case Internal.Model.TableRefType.ManyToMany:
|
case Internal.Model.TableRefType.ManyToMany:
|
||||||
continue;
|
continue;
|
||||||
case Internal.Model.TableRefType.OneToMany:
|
case Internal.Model.TableRefType.OneToMany:
|
||||||
if (itemType == null) itemType = item.GetType();
|
if (itemType == null) itemType = item.GetType();
|
||||||
if (_table.TypeLazy != null && itemType == _table.TypeLazy) {
|
if (_table.TypeLazy != null && itemType == _table.TypeLazy)
|
||||||
|
{
|
||||||
var lazyField = _dicLazyIsSetField.GetOrAdd(_table.TypeLazy, tl => new ConcurrentDictionary<string, System.Reflection.FieldInfo>()).GetOrAdd(prop.Key, propName =>
|
var lazyField = _dicLazyIsSetField.GetOrAdd(_table.TypeLazy, tl => new ConcurrentDictionary<string, System.Reflection.FieldInfo>()).GetOrAdd(prop.Key, propName =>
|
||||||
_table.TypeLazy.GetField($"__lazy__{propName}", System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance));
|
_table.TypeLazy.GetField($"__lazy__{propName}", System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance));
|
||||||
if (lazyField != null) {
|
if (lazyField != null)
|
||||||
|
{
|
||||||
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
||||||
if (lazyFieldValue == false) continue;
|
if (lazyFieldValue == false) continue;
|
||||||
}
|
}
|
||||||
@ -135,12 +157,15 @@ namespace FreeSql {
|
|||||||
if (propValEach == null) continue;
|
if (propValEach == null) continue;
|
||||||
object dbset = null;
|
object dbset = null;
|
||||||
System.Reflection.MethodInfo dbsetAddOrUpdate = null;
|
System.Reflection.MethodInfo dbsetAddOrUpdate = null;
|
||||||
foreach (var propValItem in propValEach) {
|
foreach (var propValItem in propValEach)
|
||||||
if (dbset == null) {
|
{
|
||||||
|
if (dbset == null)
|
||||||
|
{
|
||||||
dbset = _ctx.Set(tref.RefEntityType);
|
dbset = _ctx.Set(tref.RefEntityType);
|
||||||
dbsetAddOrUpdate = dbset.GetType().GetMethod("AddOrUpdateAsync", new Type[] { tref.RefEntityType });
|
dbsetAddOrUpdate = dbset.GetType().GetMethod("AddOrUpdateAsync", new Type[] { tref.RefEntityType });
|
||||||
}
|
}
|
||||||
for (var colidx = 0; colidx < tref.Columns.Count; colidx++) {
|
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
|
||||||
|
{
|
||||||
tref.RefColumns[colidx].Table.Properties[tref.RefColumns[colidx].CsName]
|
tref.RefColumns[colidx].Table.Properties[tref.RefColumns[colidx].CsName]
|
||||||
.SetValue(propValItem, tref.Columns[colidx].Table.Properties[tref.Columns[colidx].CsName].GetValue(item));
|
.SetValue(propValItem, tref.Columns[colidx].Table.Properties[tref.Columns[colidx].CsName].GetValue(item));
|
||||||
}
|
}
|
||||||
@ -156,7 +181,8 @@ namespace FreeSql {
|
|||||||
#region UpdateAsync
|
#region UpdateAsync
|
||||||
Task<int> DbContextBetchUpdateAsync(EntityState[] ups) => DbContextBetchUpdatePrivAsync(ups, false);
|
Task<int> DbContextBetchUpdateAsync(EntityState[] ups) => DbContextBetchUpdatePrivAsync(ups, false);
|
||||||
Task<int> DbContextBetchUpdateNowAsync(EntityState[] ups) => DbContextBetchUpdatePrivAsync(ups, true);
|
Task<int> DbContextBetchUpdateNowAsync(EntityState[] ups) => DbContextBetchUpdatePrivAsync(ups, true);
|
||||||
async Task<int> DbContextBetchUpdatePrivAsync(EntityState[] ups, bool isLiveUpdate) {
|
async Task<int> DbContextBetchUpdatePrivAsync(EntityState[] ups, bool isLiveUpdate)
|
||||||
|
{
|
||||||
if (ups.Any() == false) return 0;
|
if (ups.Any() == false) return 0;
|
||||||
var uplst1 = ups[ups.Length - 1];
|
var uplst1 = ups[ups.Length - 1];
|
||||||
var uplst2 = ups.Length > 1 ? ups[ups.Length - 2] : null;
|
var uplst2 = ups.Length > 1 ? ups[ups.Length - 2] : null;
|
||||||
@ -170,18 +196,22 @@ namespace FreeSql {
|
|||||||
|
|
||||||
List<EntityState> data = null;
|
List<EntityState> data = null;
|
||||||
string[] cuig = null;
|
string[] cuig = null;
|
||||||
if (uplst2 != null && string.Compare(string.Join(",", cuig1), string.Join(",", cuig2)) != 0) {
|
if (uplst2 != null && string.Compare(string.Join(",", cuig1), string.Join(",", cuig2)) != 0)
|
||||||
|
{
|
||||||
//最后一个不保存
|
//最后一个不保存
|
||||||
data = ups.ToList();
|
data = ups.ToList();
|
||||||
data.RemoveAt(ups.Length - 1);
|
data.RemoveAt(ups.Length - 1);
|
||||||
cuig = cuig2;
|
cuig = cuig2;
|
||||||
} else if (isLiveUpdate) {
|
}
|
||||||
|
else if (isLiveUpdate)
|
||||||
|
{
|
||||||
//立即保存
|
//立即保存
|
||||||
data = ups.ToList();
|
data = ups.ToList();
|
||||||
cuig = cuig1;
|
cuig = cuig1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data?.Count > 0) {
|
if (data?.Count > 0)
|
||||||
|
{
|
||||||
|
|
||||||
if (cuig.Length == _table.Columns.Count)
|
if (cuig.Length == _table.Columns.Count)
|
||||||
return ups.Length == data.Count ? -998 : -997;
|
return ups.Length == data.Count ? -998 : -997;
|
||||||
@ -191,7 +221,8 @@ namespace FreeSql {
|
|||||||
|
|
||||||
var affrows = await update.ExecuteAffrowsAsync();
|
var affrows = await update.ExecuteAffrowsAsync();
|
||||||
|
|
||||||
foreach (var newval in data) {
|
foreach (var newval in data)
|
||||||
|
{
|
||||||
if (_states.TryGetValue(newval.Key, out var tryold))
|
if (_states.TryGetValue(newval.Key, out var tryold))
|
||||||
_fsql.MapEntityValue(_entityType, newval.Value, tryold.Value);
|
_fsql.MapEntityValue(_entityType, newval.Value, tryold.Value);
|
||||||
if (newval.OldValue != null)
|
if (newval.OldValue != null)
|
||||||
@ -203,10 +234,12 @@ namespace FreeSql {
|
|||||||
//等待下次对比再保存
|
//等待下次对比再保存
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
async public Task UpdateAsync(TEntity data) {
|
async public Task UpdateAsync(TEntity data)
|
||||||
|
{
|
||||||
var exists = ExistsInStates(data);
|
var exists = ExistsInStates(data);
|
||||||
if (exists == null) throw new Exception($"不可更新,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
if (exists == null) throw new Exception($"不可更新,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
if (exists == false) {
|
if (exists == false)
|
||||||
|
{
|
||||||
var olddata = await OrmSelect(data).FirstAsync();
|
var olddata = await OrmSelect(data).FirstAsync();
|
||||||
if (olddata == null) throw new Exception($"不可更新,数据库不存在该记录:{_fsql.GetEntityString(_entityType, data)}");
|
if (olddata == null) throw new Exception($"不可更新,数据库不存在该记录:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
}
|
}
|
||||||
@ -214,9 +247,11 @@ namespace FreeSql {
|
|||||||
await UpdateRangePrivAsync(new[] { data }, true);
|
await UpdateRangePrivAsync(new[] { data }, true);
|
||||||
}
|
}
|
||||||
public Task UpdateRangeAsync(IEnumerable<TEntity> data) => UpdateRangePrivAsync(data, true);
|
public Task UpdateRangeAsync(IEnumerable<TEntity> data) => UpdateRangePrivAsync(data, true);
|
||||||
async Task UpdateRangePrivAsync(IEnumerable<TEntity> data, bool isCheck) {
|
async Task UpdateRangePrivAsync(IEnumerable<TEntity> data, bool isCheck)
|
||||||
|
{
|
||||||
if (CanUpdate(data, true) == false) return;
|
if (CanUpdate(data, true) == false) return;
|
||||||
foreach (var item in data) {
|
foreach (var item in data)
|
||||||
|
{
|
||||||
if (_dicUpdateTimes.ContainsKey(item))
|
if (_dicUpdateTimes.ContainsKey(item))
|
||||||
await DbContextExecCommandAsync();
|
await DbContextExecCommandAsync();
|
||||||
_dicUpdateTimes.Add(item, 1);
|
_dicUpdateTimes.Add(item, 1);
|
||||||
@ -232,7 +267,8 @@ namespace FreeSql {
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region RemoveAsync
|
#region RemoveAsync
|
||||||
async Task<int> DbContextBetchRemoveAsync(EntityState[] dels) {
|
async Task<int> DbContextBetchRemoveAsync(EntityState[] dels)
|
||||||
|
{
|
||||||
if (dels.Any() == false) return 0;
|
if (dels.Any() == false) return 0;
|
||||||
var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync();
|
var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync();
|
||||||
return Math.Max(dels.Length, affrows);
|
return Math.Max(dels.Length, affrows);
|
||||||
@ -240,17 +276,20 @@ namespace FreeSql {
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region AddOrUpdateAsync
|
#region AddOrUpdateAsync
|
||||||
async public Task AddOrUpdateAsync(TEntity data) {
|
async public Task AddOrUpdateAsync(TEntity data)
|
||||||
|
{
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||||
if (_table.Primarys.Any() == false) throw new Exception($"不可添加,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
if (_table.Primarys.Any() == false) throw new Exception($"不可添加,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
|
|
||||||
var flagExists = ExistsInStates(data);
|
var flagExists = ExistsInStates(data);
|
||||||
if (flagExists == false) {
|
if (flagExists == false)
|
||||||
|
{
|
||||||
var olddata = await OrmSelect(data).FirstAsync();
|
var olddata = await OrmSelect(data).FirstAsync();
|
||||||
if (olddata == null) flagExists = false;
|
if (olddata == null) flagExists = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flagExists == true && CanUpdate(data, false)) {
|
if (flagExists == true && CanUpdate(data, false))
|
||||||
|
{
|
||||||
await DbContextExecCommandAsync();
|
await DbContextExecCommandAsync();
|
||||||
var affrows = _ctx._affrows;
|
var affrows = _ctx._affrows;
|
||||||
await UpdateRangePrivAsync(new[] { data }, false);
|
await UpdateRangePrivAsync(new[] { data }, false);
|
||||||
@ -258,7 +297,8 @@ namespace FreeSql {
|
|||||||
affrows = _ctx._affrows - affrows;
|
affrows = _ctx._affrows - affrows;
|
||||||
if (affrows > 0) return;
|
if (affrows > 0) return;
|
||||||
}
|
}
|
||||||
if (CanAdd(data, false)) {
|
if (CanAdd(data, false))
|
||||||
|
{
|
||||||
_fsql.ClearEntityPrimaryValueWithIdentity(_entityType, data);
|
_fsql.ClearEntityPrimaryValueWithIdentity(_entityType, data);
|
||||||
await AddPrivAsync(data, false);
|
await AddPrivAsync(data, false);
|
||||||
}
|
}
|
||||||
|
@ -6,29 +6,37 @@ using System.Collections.Concurrent;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
partial class DbSet<TEntity> {
|
{
|
||||||
|
partial class DbSet<TEntity>
|
||||||
|
{
|
||||||
|
|
||||||
void DbContextExecCommand() {
|
void DbContextExecCommand()
|
||||||
|
{
|
||||||
_dicUpdateTimes.Clear();
|
_dicUpdateTimes.Clear();
|
||||||
_ctx.ExecCommand();
|
_ctx.ExecCommand();
|
||||||
}
|
}
|
||||||
|
|
||||||
int DbContextBetchAdd(EntityState[] adds) {
|
int DbContextBetchAdd(EntityState[] adds)
|
||||||
|
{
|
||||||
if (adds.Any() == false) return 0;
|
if (adds.Any() == false) return 0;
|
||||||
var affrows = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows();
|
var affrows = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows();
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Add
|
#region Add
|
||||||
void AddPriv(TEntity data, bool isCheck) {
|
void AddPriv(TEntity data, bool isCheck)
|
||||||
|
{
|
||||||
if (isCheck && CanAdd(data, true) == false) return;
|
if (isCheck && CanAdd(data, true) == false) return;
|
||||||
if (_tableIdentitys.Length > 0) {
|
if (_tableIdentitys.Length > 0)
|
||||||
|
{
|
||||||
//有自增,马上执行
|
//有自增,马上执行
|
||||||
switch (_fsql.Ado.DataType) {
|
switch (_fsql.Ado.DataType)
|
||||||
|
{
|
||||||
case DataType.SqlServer:
|
case DataType.SqlServer:
|
||||||
case DataType.PostgreSQL:
|
case DataType.PostgreSQL:
|
||||||
if (_tableIdentitys.Length == 1) {
|
if (_tableIdentitys.Length == 1)
|
||||||
|
{
|
||||||
DbContextExecCommand();
|
DbContextExecCommand();
|
||||||
var idtval = this.OrmInsert(data).ExecuteIdentity();
|
var idtval = this.OrmInsert(data).ExecuteIdentity();
|
||||||
IncrAffrows(1);
|
IncrAffrows(1);
|
||||||
@ -36,7 +44,9 @@ namespace FreeSql {
|
|||||||
Attach(data);
|
Attach(data);
|
||||||
if (_ctx.Options.EnableAddOrUpdateNavigateList)
|
if (_ctx.Options.EnableAddOrUpdateNavigateList)
|
||||||
AddOrUpdateNavigateList(data);
|
AddOrUpdateNavigateList(data);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
DbContextExecCommand();
|
DbContextExecCommand();
|
||||||
var newval = this.OrmInsert(data).ExecuteInserted().First();
|
var newval = this.OrmInsert(data).ExecuteInserted().First();
|
||||||
IncrAffrows(1);
|
IncrAffrows(1);
|
||||||
@ -49,7 +59,8 @@ namespace FreeSql {
|
|||||||
case DataType.MySql:
|
case DataType.MySql:
|
||||||
case DataType.Oracle:
|
case DataType.Oracle:
|
||||||
case DataType.Sqlite:
|
case DataType.Sqlite:
|
||||||
if (_tableIdentitys.Length == 1) {
|
if (_tableIdentitys.Length == 1)
|
||||||
|
{
|
||||||
DbContextExecCommand();
|
DbContextExecCommand();
|
||||||
var idtval = this.OrmInsert(data).ExecuteIdentity();
|
var idtval = this.OrmInsert(data).ExecuteIdentity();
|
||||||
IncrAffrows(1);
|
IncrAffrows(1);
|
||||||
@ -71,15 +82,19 @@ namespace FreeSql {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void Add(TEntity data) => AddPriv(data, true);
|
public void Add(TEntity data) => AddPriv(data, true);
|
||||||
public void AddRange(IEnumerable<TEntity> data) {
|
public void AddRange(IEnumerable<TEntity> data)
|
||||||
|
{
|
||||||
if (CanAdd(data, true) == false) return;
|
if (CanAdd(data, true) == false) return;
|
||||||
if (data.ElementAtOrDefault(1) == default(TEntity)) {
|
if (data.ElementAtOrDefault(1) == default(TEntity))
|
||||||
|
{
|
||||||
Add(data.First());
|
Add(data.First());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_tableIdentitys.Length > 0) {
|
if (_tableIdentitys.Length > 0)
|
||||||
|
{
|
||||||
//有自增,马上执行
|
//有自增,马上执行
|
||||||
switch (_fsql.Ado.DataType) {
|
switch (_fsql.Ado.DataType)
|
||||||
|
{
|
||||||
case DataType.SqlServer:
|
case DataType.SqlServer:
|
||||||
case DataType.PostgreSQL:
|
case DataType.PostgreSQL:
|
||||||
DbContextExecCommand();
|
DbContextExecCommand();
|
||||||
@ -101,7 +116,9 @@ namespace FreeSql {
|
|||||||
AddPriv(s, false);
|
AddPriv(s, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
//进入队列,等待 SaveChanges 时执行
|
//进入队列,等待 SaveChanges 时执行
|
||||||
foreach (var item in data)
|
foreach (var item in data)
|
||||||
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item));
|
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item));
|
||||||
@ -112,24 +129,30 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
static ConcurrentDictionary<Type, ConcurrentDictionary<string, FieldInfo>> _dicLazyIsSetField = new ConcurrentDictionary<Type, ConcurrentDictionary<string, FieldInfo>>();
|
static ConcurrentDictionary<Type, ConcurrentDictionary<string, FieldInfo>> _dicLazyIsSetField = new ConcurrentDictionary<Type, ConcurrentDictionary<string, FieldInfo>>();
|
||||||
void AddOrUpdateNavigateList(TEntity item) {
|
void AddOrUpdateNavigateList(TEntity item)
|
||||||
|
{
|
||||||
Type itemType = null;
|
Type itemType = null;
|
||||||
foreach (var prop in _table.Properties) {
|
foreach (var prop in _table.Properties)
|
||||||
|
{
|
||||||
if (_table.ColumnsByCsIgnore.ContainsKey(prop.Key)) continue;
|
if (_table.ColumnsByCsIgnore.ContainsKey(prop.Key)) continue;
|
||||||
if (_table.ColumnsByCs.ContainsKey(prop.Key)) continue;
|
if (_table.ColumnsByCs.ContainsKey(prop.Key)) continue;
|
||||||
|
|
||||||
object propVal = null;
|
object propVal = null;
|
||||||
|
|
||||||
if (itemType == null) itemType = item.GetType();
|
if (itemType == null) itemType = item.GetType();
|
||||||
if (_table.TypeLazy != null && itemType == _table.TypeLazy) {
|
if (_table.TypeLazy != null && itemType == _table.TypeLazy)
|
||||||
|
{
|
||||||
var lazyField = _dicLazyIsSetField.GetOrAdd(_table.TypeLazy, tl => new ConcurrentDictionary<string, FieldInfo>()).GetOrAdd(prop.Key, propName =>
|
var lazyField = _dicLazyIsSetField.GetOrAdd(_table.TypeLazy, tl => new ConcurrentDictionary<string, FieldInfo>()).GetOrAdd(prop.Key, propName =>
|
||||||
_table.TypeLazy.GetField($"__lazy__{propName}", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance));
|
_table.TypeLazy.GetField($"__lazy__{propName}", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance));
|
||||||
if (lazyField != null) {
|
if (lazyField != null)
|
||||||
|
{
|
||||||
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
var lazyFieldValue = (bool)lazyField.GetValue(item);
|
||||||
if (lazyFieldValue == false) continue;
|
if (lazyFieldValue == false) continue;
|
||||||
}
|
}
|
||||||
propVal = prop.Value.GetValue(item);
|
propVal = prop.Value.GetValue(item);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
propVal = prop.Value.GetValue(item);
|
propVal = prop.Value.GetValue(item);
|
||||||
if (propVal == null) continue;
|
if (propVal == null) continue;
|
||||||
}
|
}
|
||||||
@ -137,7 +160,8 @@ namespace FreeSql {
|
|||||||
var tref = _table.GetTableRef(prop.Key, true);
|
var tref = _table.GetTableRef(prop.Key, true);
|
||||||
if (tref == null) continue;
|
if (tref == null) continue;
|
||||||
|
|
||||||
switch(tref.RefType) {
|
switch (tref.RefType)
|
||||||
|
{
|
||||||
case Internal.Model.TableRefType.OneToOne:
|
case Internal.Model.TableRefType.OneToOne:
|
||||||
case Internal.Model.TableRefType.ManyToOne:
|
case Internal.Model.TableRefType.ManyToOne:
|
||||||
case Internal.Model.TableRefType.ManyToMany:
|
case Internal.Model.TableRefType.ManyToMany:
|
||||||
@ -147,12 +171,15 @@ namespace FreeSql {
|
|||||||
if (propValEach == null) continue;
|
if (propValEach == null) continue;
|
||||||
object dbset = null;
|
object dbset = null;
|
||||||
MethodInfo dbsetAddOrUpdate = null;
|
MethodInfo dbsetAddOrUpdate = null;
|
||||||
foreach (var propValItem in propValEach) {
|
foreach (var propValItem in propValEach)
|
||||||
if (dbset == null) {
|
{
|
||||||
|
if (dbset == null)
|
||||||
|
{
|
||||||
dbset = _ctx.Set(tref.RefEntityType);
|
dbset = _ctx.Set(tref.RefEntityType);
|
||||||
dbsetAddOrUpdate = dbset.GetType().GetMethod("AddOrUpdate", new Type[] { tref.RefEntityType });
|
dbsetAddOrUpdate = dbset.GetType().GetMethod("AddOrUpdate", new Type[] { tref.RefEntityType });
|
||||||
}
|
}
|
||||||
for (var colidx = 0; colidx < tref.Columns.Count; colidx++) {
|
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
|
||||||
|
{
|
||||||
tref.RefColumns[colidx].Table.Properties[tref.RefColumns[colidx].CsName]
|
tref.RefColumns[colidx].Table.Properties[tref.RefColumns[colidx].CsName]
|
||||||
.SetValue(propValItem, tref.Columns[colidx].Table.Properties[tref.Columns[colidx].CsName].GetValue(item));
|
.SetValue(propValItem, tref.Columns[colidx].Table.Properties[tref.Columns[colidx].CsName].GetValue(item));
|
||||||
}
|
}
|
||||||
@ -167,7 +194,8 @@ namespace FreeSql {
|
|||||||
#region Update
|
#region Update
|
||||||
int DbContextBetchUpdate(EntityState[] ups) => DbContextBetchUpdatePriv(ups, false);
|
int DbContextBetchUpdate(EntityState[] ups) => DbContextBetchUpdatePriv(ups, false);
|
||||||
int DbContextBetchUpdateNow(EntityState[] ups) => DbContextBetchUpdatePriv(ups, true);
|
int DbContextBetchUpdateNow(EntityState[] ups) => DbContextBetchUpdatePriv(ups, true);
|
||||||
int DbContextBetchUpdatePriv(EntityState[] ups, bool isLiveUpdate) {
|
int DbContextBetchUpdatePriv(EntityState[] ups, bool isLiveUpdate)
|
||||||
|
{
|
||||||
if (ups.Any() == false) return 0;
|
if (ups.Any() == false) return 0;
|
||||||
var uplst1 = ups[ups.Length - 1];
|
var uplst1 = ups[ups.Length - 1];
|
||||||
var uplst2 = ups.Length > 1 ? ups[ups.Length - 2] : null;
|
var uplst2 = ups.Length > 1 ? ups[ups.Length - 2] : null;
|
||||||
@ -181,18 +209,22 @@ namespace FreeSql {
|
|||||||
|
|
||||||
List<EntityState> data = null;
|
List<EntityState> data = null;
|
||||||
string[] cuig = null;
|
string[] cuig = null;
|
||||||
if (uplst2 != null && string.Compare(string.Join(",", cuig1), string.Join(",", cuig2)) != 0) {
|
if (uplst2 != null && string.Compare(string.Join(",", cuig1), string.Join(",", cuig2)) != 0)
|
||||||
|
{
|
||||||
//最后一个不保存
|
//最后一个不保存
|
||||||
data = ups.ToList();
|
data = ups.ToList();
|
||||||
data.RemoveAt(ups.Length - 1);
|
data.RemoveAt(ups.Length - 1);
|
||||||
cuig = cuig2;
|
cuig = cuig2;
|
||||||
} else if (isLiveUpdate) {
|
}
|
||||||
|
else if (isLiveUpdate)
|
||||||
|
{
|
||||||
//立即保存
|
//立即保存
|
||||||
data = ups.ToList();
|
data = ups.ToList();
|
||||||
cuig = cuig1;
|
cuig = cuig1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data?.Count > 0) {
|
if (data?.Count > 0)
|
||||||
|
{
|
||||||
|
|
||||||
if (cuig.Length == _table.Columns.Count)
|
if (cuig.Length == _table.Columns.Count)
|
||||||
return ups.Length == data.Count ? -998 : -997;
|
return ups.Length == data.Count ? -998 : -997;
|
||||||
@ -202,7 +234,8 @@ namespace FreeSql {
|
|||||||
|
|
||||||
var affrows = update.ExecuteAffrows();
|
var affrows = update.ExecuteAffrows();
|
||||||
|
|
||||||
foreach (var newval in data) {
|
foreach (var newval in data)
|
||||||
|
{
|
||||||
if (_states.TryGetValue(newval.Key, out var tryold))
|
if (_states.TryGetValue(newval.Key, out var tryold))
|
||||||
_fsql.MapEntityValue(_entityType, newval.Value, tryold.Value);
|
_fsql.MapEntityValue(_entityType, newval.Value, tryold.Value);
|
||||||
if (newval.OldValue != null)
|
if (newval.OldValue != null)
|
||||||
@ -220,10 +253,12 @@ namespace FreeSql {
|
|||||||
/// 更新
|
/// 更新
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void Update(TEntity data) {
|
public void Update(TEntity data)
|
||||||
|
{
|
||||||
var exists = ExistsInStates(data);
|
var exists = ExistsInStates(data);
|
||||||
if (exists == null) throw new Exception($"不可更新,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
if (exists == null) throw new Exception($"不可更新,未设置主键的值:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
if (exists == false) {
|
if (exists == false)
|
||||||
|
{
|
||||||
var olddata = OrmSelect(data).First();
|
var olddata = OrmSelect(data).First();
|
||||||
if (olddata == null) throw new Exception($"不可更新,数据库不存在该记录:{_fsql.GetEntityString(_entityType, data)}");
|
if (olddata == null) throw new Exception($"不可更新,数据库不存在该记录:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
}
|
}
|
||||||
@ -231,9 +266,11 @@ namespace FreeSql {
|
|||||||
UpdateRangePriv(new[] { data }, true);
|
UpdateRangePriv(new[] { data }, true);
|
||||||
}
|
}
|
||||||
public void UpdateRange(IEnumerable<TEntity> data) => UpdateRangePriv(data, true);
|
public void UpdateRange(IEnumerable<TEntity> data) => UpdateRangePriv(data, true);
|
||||||
void UpdateRangePriv(IEnumerable<TEntity> data, bool isCheck) {
|
void UpdateRangePriv(IEnumerable<TEntity> data, bool isCheck)
|
||||||
|
{
|
||||||
if (CanUpdate(data, true) == false) return;
|
if (CanUpdate(data, true) == false) return;
|
||||||
foreach (var item in data) {
|
foreach (var item in data)
|
||||||
|
{
|
||||||
if (_dicUpdateTimes.ContainsKey(item))
|
if (_dicUpdateTimes.ContainsKey(item))
|
||||||
DbContextExecCommand();
|
DbContextExecCommand();
|
||||||
_dicUpdateTimes.Add(item, 1);
|
_dicUpdateTimes.Add(item, 1);
|
||||||
@ -249,7 +286,8 @@ namespace FreeSql {
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Remove
|
#region Remove
|
||||||
int DbContextBetchRemove(EntityState[] dels) {
|
int DbContextBetchRemove(EntityState[] dels)
|
||||||
|
{
|
||||||
if (dels.Any() == false) return 0;
|
if (dels.Any() == false) return 0;
|
||||||
var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows();
|
var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows();
|
||||||
return Math.Max(dels.Length, affrows);
|
return Math.Max(dels.Length, affrows);
|
||||||
@ -260,9 +298,11 @@ namespace FreeSql {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void Remove(TEntity data) => RemoveRange(new[] { data });
|
public void Remove(TEntity data) => RemoveRange(new[] { data });
|
||||||
public void RemoveRange(IEnumerable<TEntity> data) {
|
public void RemoveRange(IEnumerable<TEntity> data)
|
||||||
|
{
|
||||||
if (CanRemove(data, true) == false) return;
|
if (CanRemove(data, true) == false) return;
|
||||||
foreach (var item in data) {
|
foreach (var item in data)
|
||||||
|
{
|
||||||
var state = CreateEntityState(item);
|
var state = CreateEntityState(item);
|
||||||
_states.TryRemove(state.Key, out var trystate);
|
_states.TryRemove(state.Key, out var trystate);
|
||||||
_fsql.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, item);
|
_fsql.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, item);
|
||||||
@ -277,17 +317,20 @@ namespace FreeSql {
|
|||||||
/// 添加或更新
|
/// 添加或更新
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data"></param>
|
/// <param name="data"></param>
|
||||||
public void AddOrUpdate(TEntity data) {
|
public void AddOrUpdate(TEntity data)
|
||||||
|
{
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
if (data == null) throw new ArgumentNullException(nameof(data));
|
||||||
if (_table.Primarys.Any() == false) throw new Exception($"不可添加,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
if (_table.Primarys.Any() == false) throw new Exception($"不可添加,实体没有主键:{_fsql.GetEntityString(_entityType, data)}");
|
||||||
|
|
||||||
var flagExists = ExistsInStates(data);
|
var flagExists = ExistsInStates(data);
|
||||||
if (flagExists == false) {
|
if (flagExists == false)
|
||||||
|
{
|
||||||
var olddata = OrmSelect(data).First();
|
var olddata = OrmSelect(data).First();
|
||||||
if (olddata == null) flagExists = false;
|
if (olddata == null) flagExists = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flagExists == true && CanUpdate(data, false)) {
|
if (flagExists == true && CanUpdate(data, false))
|
||||||
|
{
|
||||||
DbContextExecCommand();
|
DbContextExecCommand();
|
||||||
var affrows = _ctx._affrows;
|
var affrows = _ctx._affrows;
|
||||||
UpdateRangePriv(new[] { data }, false);
|
UpdateRangePriv(new[] { data }, false);
|
||||||
@ -295,7 +338,8 @@ namespace FreeSql {
|
|||||||
affrows = _ctx._affrows - affrows;
|
affrows = _ctx._affrows - affrows;
|
||||||
if (affrows > 0) return;
|
if (affrows > 0) return;
|
||||||
}
|
}
|
||||||
if (CanAdd(data, false)) {
|
if (CanAdd(data, false))
|
||||||
|
{
|
||||||
_fsql.ClearEntityPrimaryValueWithIdentity(_entityType, data);
|
_fsql.ClearEntityPrimaryValueWithIdentity(_entityType, data);
|
||||||
AddPriv(data, false);
|
AddPriv(data, false);
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,20 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public static class DbContextDependencyInjection {
|
{
|
||||||
|
public static class DbContextDependencyInjection
|
||||||
|
{
|
||||||
|
|
||||||
public static IServiceCollection AddFreeDbContext<TDbContext>(this IServiceCollection services, Action<DbContextOptionsBuilder> options) where TDbContext : DbContext {
|
public static IServiceCollection AddFreeDbContext<TDbContext>(this IServiceCollection services, Action<DbContextOptionsBuilder> options) where TDbContext : DbContext
|
||||||
|
{
|
||||||
|
|
||||||
services.AddScoped<TDbContext>(sp => {
|
services.AddScoped<TDbContext>(sp =>
|
||||||
|
{
|
||||||
var ctx = Activator.CreateInstance<TDbContext>();
|
var ctx = Activator.CreateInstance<TDbContext>();
|
||||||
|
|
||||||
if (ctx._orm == null) {
|
if (ctx._orm == null)
|
||||||
|
{
|
||||||
var builder = new DbContextOptionsBuilder();
|
var builder = new DbContextOptionsBuilder();
|
||||||
options(builder);
|
options(builder);
|
||||||
ctx._orm = builder._fsql;
|
ctx._orm = builder._fsql;
|
||||||
|
@ -2,14 +2,16 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
public static class FreeSqlDbContextExtenssions {
|
public static class FreeSqlDbContextExtenssions
|
||||||
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建普通数据上下文档对象
|
/// 创建普通数据上下文档对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="that"></param>
|
/// <param name="that"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static DbContext CreateDbContext(this IFreeSql that) {
|
public static DbContext CreateDbContext(this IFreeSql that)
|
||||||
|
{
|
||||||
return new FreeContext(that);
|
return new FreeContext(that);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,7 +21,8 @@ public static class FreeSqlDbContextExtenssions {
|
|||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <param name="select"></param>
|
/// <param name="select"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static ISelect<T> NoTracking<T>(this ISelect<T> select) where T : class {
|
public static ISelect<T> NoTracking<T>(this ISelect<T> select) where T : class
|
||||||
|
{
|
||||||
return select.TrackToList(null);
|
return select.TrackToList(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +31,8 @@ public static class FreeSqlDbContextExtenssions {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="that"></param>
|
/// <param name="that"></param>
|
||||||
/// <param name="options"></param>
|
/// <param name="options"></param>
|
||||||
public static void SetDbContextOptions(this IFreeSql that, Action<DbContextOptions> options) {
|
public static void SetDbContextOptions(this IFreeSql that, Action<DbContextOptions> options)
|
||||||
|
{
|
||||||
if (options == null) return;
|
if (options == null) return;
|
||||||
var cfg = _dicSetDbContextOptions.GetOrAdd(that, t => new DbContextOptions());
|
var cfg = _dicSetDbContextOptions.GetOrAdd(that, t => new DbContextOptions());
|
||||||
options(cfg);
|
options(cfg);
|
||||||
|
@ -3,11 +3,14 @@ using System.Collections.Concurrent;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
internal class RepositoryDbContext : DbContext {
|
{
|
||||||
|
internal class RepositoryDbContext : DbContext
|
||||||
|
{
|
||||||
|
|
||||||
protected IBaseRepository _repos;
|
protected IBaseRepository _repos;
|
||||||
public RepositoryDbContext(IFreeSql orm, IBaseRepository repos) : base() {
|
public RepositoryDbContext(IFreeSql orm, IBaseRepository repos) : base()
|
||||||
|
{
|
||||||
_orm = orm;
|
_orm = orm;
|
||||||
_repos = repos;
|
_repos = repos;
|
||||||
_isUseUnitOfWork = false;
|
_isUseUnitOfWork = false;
|
||||||
@ -17,14 +20,16 @@ namespace FreeSql {
|
|||||||
|
|
||||||
static ConcurrentDictionary<Type, FieldInfo> _dicGetRepositoryDbField = new ConcurrentDictionary<Type, FieldInfo>();
|
static ConcurrentDictionary<Type, FieldInfo> _dicGetRepositoryDbField = new ConcurrentDictionary<Type, FieldInfo>();
|
||||||
static FieldInfo GetRepositoryDbField(Type type) => _dicGetRepositoryDbField.GetOrAdd(type, tp => typeof(BaseRepository<,>).MakeGenericType(tp, typeof(int)).GetField("_dbPriv", BindingFlags.Instance | BindingFlags.NonPublic));
|
static FieldInfo GetRepositoryDbField(Type type) => _dicGetRepositoryDbField.GetOrAdd(type, tp => typeof(BaseRepository<,>).MakeGenericType(tp, typeof(int)).GetField("_dbPriv", BindingFlags.Instance | BindingFlags.NonPublic));
|
||||||
public override IDbSet Set(Type entityType) {
|
public override IDbSet Set(Type entityType)
|
||||||
|
{
|
||||||
if (_dicSet.ContainsKey(entityType)) return _dicSet[entityType];
|
if (_dicSet.ContainsKey(entityType)) return _dicSet[entityType];
|
||||||
|
|
||||||
var tb = _orm.CodeFirst.GetTableByEntity(entityType);
|
var tb = _orm.CodeFirst.GetTableByEntity(entityType);
|
||||||
if (tb == null) return null;
|
if (tb == null) return null;
|
||||||
|
|
||||||
object repos = _repos;
|
object repos = _repos;
|
||||||
if (entityType != _repos.EntityType) {
|
if (entityType != _repos.EntityType)
|
||||||
|
{
|
||||||
repos = Activator.CreateInstance(typeof(DefaultRepository<,>).MakeGenericType(entityType, typeof(int)), _repos.Orm);
|
repos = Activator.CreateInstance(typeof(DefaultRepository<,>).MakeGenericType(entityType, typeof(int)), _repos.Orm);
|
||||||
(repos as IBaseRepository).UnitOfWork = _repos.UnitOfWork;
|
(repos as IBaseRepository).UnitOfWork = _repos.UnitOfWork;
|
||||||
GetRepositoryDbField(entityType).SetValue(repos, this);
|
GetRepositoryDbField(entityType).SetValue(repos, this);
|
||||||
@ -38,21 +43,25 @@ namespace FreeSql {
|
|||||||
return sd;
|
return sd;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetRepositoryDataFilter<TEntity>(object repos, BaseRepository<TEntity> baseRepo) where TEntity : class {
|
public static void SetRepositoryDataFilter<TEntity>(object repos, BaseRepository<TEntity> baseRepo) where TEntity : class
|
||||||
|
{
|
||||||
var filter = baseRepo.DataFilter as DataFilter<TEntity>;
|
var filter = baseRepo.DataFilter as DataFilter<TEntity>;
|
||||||
DataFilterUtil.SetRepositoryDataFilter(repos, fl => {
|
DataFilterUtil.SetRepositoryDataFilter(repos, fl =>
|
||||||
|
{
|
||||||
foreach (var f in filter._filters)
|
foreach (var f in filter._filters)
|
||||||
fl.Apply<TEntity>(f.Key, f.Value.Expression);
|
fl.Apply<TEntity>(f.Key, f.Value.Expression);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int SaveChanges() {
|
public override int SaveChanges()
|
||||||
|
{
|
||||||
ExecCommand();
|
ExecCommand();
|
||||||
var ret = _affrows;
|
var ret = _affrows;
|
||||||
_affrows = 0;
|
_affrows = 0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
async public override Task<int> SaveChangesAsync() {
|
async public override Task<int> SaveChangesAsync()
|
||||||
|
{
|
||||||
await ExecCommandAsync();
|
await ExecCommandAsync();
|
||||||
var ret = _affrows;
|
var ret = _affrows;
|
||||||
_affrows = 0;
|
_affrows = 0;
|
||||||
|
@ -3,18 +3,22 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
internal class RepositoryDbSet<TEntity> : DbSet<TEntity> where TEntity : class {
|
{
|
||||||
|
internal class RepositoryDbSet<TEntity> : DbSet<TEntity> where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
protected BaseRepository<TEntity> _repos;
|
protected BaseRepository<TEntity> _repos;
|
||||||
public RepositoryDbSet(BaseRepository<TEntity> repos) {
|
public RepositoryDbSet(BaseRepository<TEntity> repos)
|
||||||
|
{
|
||||||
_ctx = repos._db;
|
_ctx = repos._db;
|
||||||
_fsql = repos.Orm;
|
_fsql = repos.Orm;
|
||||||
_uow = repos.UnitOfWork;
|
_uow = repos.UnitOfWork;
|
||||||
_repos = repos;
|
_repos = repos;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override ISelect<TEntity> OrmSelect(object dywhere) {
|
protected override ISelect<TEntity> OrmSelect(object dywhere)
|
||||||
|
{
|
||||||
var select = base.OrmSelect(dywhere);
|
var select = base.OrmSelect(dywhere);
|
||||||
|
|
||||||
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
@ -22,10 +26,12 @@ namespace FreeSql {
|
|||||||
return select.AsTable(_repos.AsTableSelectInternal);
|
return select.AsTable(_repos.AsTableSelectInternal);
|
||||||
}
|
}
|
||||||
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
|
internal ISelect<TEntity> OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
|
||||||
protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys) {
|
protected override IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
var update = base.OrmUpdate(entitys);
|
var update = base.OrmUpdate(entitys);
|
||||||
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) {
|
foreach (var filter in filters)
|
||||||
|
{
|
||||||
if (entitys != null)
|
if (entitys != null)
|
||||||
foreach (var entity in entitys)
|
foreach (var entity in entitys)
|
||||||
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
|
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
|
||||||
@ -35,7 +41,8 @@ namespace FreeSql {
|
|||||||
return update.AsTable(_repos.AsTableInternal);
|
return update.AsTable(_repos.AsTableInternal);
|
||||||
}
|
}
|
||||||
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
|
internal IUpdate<TEntity> OrmUpdateInternal(IEnumerable<TEntity> entitys) => OrmUpdate(entitys);
|
||||||
protected override IDelete<TEntity> OrmDelete(object dywhere) {
|
protected override IDelete<TEntity> OrmDelete(object dywhere)
|
||||||
|
{
|
||||||
var delete = base.OrmDelete(dywhere);
|
var delete = base.OrmDelete(dywhere);
|
||||||
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) delete.Where(filter.Value.Expression);
|
foreach (var filter in filters) delete.Where(filter.Value.Expression);
|
||||||
@ -43,10 +50,12 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
|
internal IDelete<TEntity> OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
|
||||||
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
protected override IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
||||||
protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys) {
|
protected override IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
var insert = base.OrmInsert(entitys);
|
var insert = base.OrmInsert(entitys);
|
||||||
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (_repos.DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) {
|
foreach (var filter in filters)
|
||||||
|
{
|
||||||
if (entitys != null)
|
if (entitys != null)
|
||||||
foreach (var entity in entitys)
|
foreach (var entity in entitys)
|
||||||
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
|
if (filter.Value.ExpressionDelegate?.Invoke(entity) == false)
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
|
||||||
public interface IRepositoryUnitOfWork : IUnitOfWork {
|
public interface IRepositoryUnitOfWork : IUnitOfWork
|
||||||
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 在工作单元内创建默认仓库类,工作单元下的仓储操作具有事务特点
|
/// 在工作单元内创建默认仓库类,工作单元下的仓储操作具有事务特点
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -31,24 +33,29 @@ namespace FreeSql {
|
|||||||
GuidRepository<TEntity> GetGuidRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class;
|
GuidRepository<TEntity> GetGuidRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RepositoryUnitOfWork : UnitOfWork, IRepositoryUnitOfWork {
|
class RepositoryUnitOfWork : UnitOfWork, IRepositoryUnitOfWork
|
||||||
|
{
|
||||||
|
|
||||||
public RepositoryUnitOfWork(IFreeSql fsql) : base(fsql) {
|
public RepositoryUnitOfWork(IFreeSql fsql) : base(fsql)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public GuidRepository<TEntity> GetGuidRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class {
|
public GuidRepository<TEntity> GetGuidRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class
|
||||||
|
{
|
||||||
var repos = new GuidRepository<TEntity>(_fsql, filter, asTable);
|
var repos = new GuidRepository<TEntity>(_fsql, filter, asTable);
|
||||||
repos.UnitOfWork = this;
|
repos.UnitOfWork = this;
|
||||||
return repos;
|
return repos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefaultRepository<TEntity, TKey> GetRepository<TEntity, TKey>(Expression<Func<TEntity, bool>> filter = null) where TEntity : class {
|
public DefaultRepository<TEntity, TKey> GetRepository<TEntity, TKey>(Expression<Func<TEntity, bool>> filter = null) where TEntity : class
|
||||||
|
{
|
||||||
var repos = new DefaultRepository<TEntity, TKey>(_fsql, filter);
|
var repos = new DefaultRepository<TEntity, TKey>(_fsql, filter);
|
||||||
repos.UnitOfWork = this;
|
repos.UnitOfWork = this;
|
||||||
return repos;
|
return repos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseRepository<TEntity> GetRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null) where TEntity : class {
|
public BaseRepository<TEntity> GetRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null) where TEntity : class
|
||||||
|
{
|
||||||
var repos = new DefaultRepository<TEntity, int>(_fsql, filter);
|
var repos = new DefaultRepository<TEntity, int>(_fsql, filter);
|
||||||
repos.UnitOfWork = this;
|
repos.UnitOfWork = this;
|
||||||
return repos;
|
return repos;
|
||||||
|
@ -4,8 +4,10 @@ using System.Collections.Concurrent;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public interface IDataFilter<TEntity> : IDisposable where TEntity : class {
|
{
|
||||||
|
public interface IDataFilter<TEntity> : IDisposable where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
IDataFilter<TEntity> Apply(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp);
|
IDataFilter<TEntity> Apply(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp);
|
||||||
|
|
||||||
@ -36,9 +38,11 @@ namespace FreeSql {
|
|||||||
bool IsEnabled(string filterName);
|
bool IsEnabled(string filterName);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class DataFilter<TEntity> : IDataFilter<TEntity> where TEntity : class {
|
internal class DataFilter<TEntity> : IDataFilter<TEntity> where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
internal class FilterItem {
|
internal class FilterItem
|
||||||
|
{
|
||||||
public Expression<Func<TEntity, bool>> Expression { get; set; }
|
public Expression<Func<TEntity, bool>> Expression { get; set; }
|
||||||
Func<TEntity, bool> _expressionDelegate;
|
Func<TEntity, bool> _expressionDelegate;
|
||||||
public Func<TEntity, bool> ExpressionDelegate => _expressionDelegate ?? (_expressionDelegate = Expression?.Compile());
|
public Func<TEntity, bool> ExpressionDelegate => _expressionDelegate ?? (_expressionDelegate = Expression?.Compile());
|
||||||
@ -46,7 +50,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal ConcurrentDictionary<string, FilterItem> _filters = new ConcurrentDictionary<string, FilterItem>(StringComparer.CurrentCultureIgnoreCase);
|
internal ConcurrentDictionary<string, FilterItem> _filters = new ConcurrentDictionary<string, FilterItem>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
public IDataFilter<TEntity> Apply(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp) {
|
public IDataFilter<TEntity> Apply(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp)
|
||||||
|
{
|
||||||
|
|
||||||
if (filterName == null)
|
if (filterName == null)
|
||||||
throw new ArgumentNullException(nameof(filterName));
|
throw new ArgumentNullException(nameof(filterName));
|
||||||
@ -57,13 +62,17 @@ namespace FreeSql {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDisposable Disable(params string[] filterName) {
|
public IDisposable Disable(params string[] filterName)
|
||||||
|
{
|
||||||
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
|
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
|
||||||
|
|
||||||
List<string> restore = new List<string>();
|
List<string> restore = new List<string>();
|
||||||
foreach (var name in filterName) {
|
foreach (var name in filterName)
|
||||||
if (_filters.TryGetValue(name, out var tryfi)) {
|
{
|
||||||
if (tryfi.IsEnabled) {
|
if (_filters.TryGetValue(name, out var tryfi))
|
||||||
|
{
|
||||||
|
if (tryfi.IsEnabled)
|
||||||
|
{
|
||||||
restore.Add(name);
|
restore.Add(name);
|
||||||
tryfi.IsEnabled = false;
|
tryfi.IsEnabled = false;
|
||||||
}
|
}
|
||||||
@ -71,33 +80,43 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
return new UsingAny(() => this.Enable(restore.ToArray()));
|
return new UsingAny(() => this.Enable(restore.ToArray()));
|
||||||
}
|
}
|
||||||
public IDisposable DisableAll() {
|
public IDisposable DisableAll()
|
||||||
|
{
|
||||||
List<string> restore = new List<string>();
|
List<string> restore = new List<string>();
|
||||||
foreach (var val in _filters) {
|
foreach (var val in _filters)
|
||||||
if (val.Value.IsEnabled) {
|
{
|
||||||
|
if (val.Value.IsEnabled)
|
||||||
|
{
|
||||||
restore.Add(val.Key);
|
restore.Add(val.Key);
|
||||||
val.Value.IsEnabled = false;
|
val.Value.IsEnabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new UsingAny(() => this.Enable(restore.ToArray()));
|
return new UsingAny(() => this.Enable(restore.ToArray()));
|
||||||
}
|
}
|
||||||
class UsingAny : IDisposable {
|
class UsingAny : IDisposable
|
||||||
|
{
|
||||||
Action _ondis;
|
Action _ondis;
|
||||||
public UsingAny(Action ondis) {
|
public UsingAny(Action ondis)
|
||||||
|
{
|
||||||
_ondis = ondis;
|
_ondis = ondis;
|
||||||
}
|
}
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
_ondis?.Invoke();
|
_ondis?.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDisposable Enable(params string[] filterName) {
|
public IDisposable Enable(params string[] filterName)
|
||||||
|
{
|
||||||
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
|
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
|
||||||
|
|
||||||
List<string> restore = new List<string>();
|
List<string> restore = new List<string>();
|
||||||
foreach (var name in filterName) {
|
foreach (var name in filterName)
|
||||||
if (_filters.TryGetValue(name, out var tryfi)) {
|
{
|
||||||
if (tryfi.IsEnabled == false) {
|
if (_filters.TryGetValue(name, out var tryfi))
|
||||||
|
{
|
||||||
|
if (tryfi.IsEnabled == false)
|
||||||
|
{
|
||||||
restore.Add(name);
|
restore.Add(name);
|
||||||
tryfi.IsEnabled = true;
|
tryfi.IsEnabled = true;
|
||||||
}
|
}
|
||||||
@ -105,10 +124,13 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
return new UsingAny(() => this.Disable(restore.ToArray()));
|
return new UsingAny(() => this.Disable(restore.ToArray()));
|
||||||
}
|
}
|
||||||
public IDisposable EnableAll() {
|
public IDisposable EnableAll()
|
||||||
|
{
|
||||||
List<string> restore = new List<string>();
|
List<string> restore = new List<string>();
|
||||||
foreach (var val in _filters) {
|
foreach (var val in _filters)
|
||||||
if (val.Value.IsEnabled == false) {
|
{
|
||||||
|
if (val.Value.IsEnabled == false)
|
||||||
|
{
|
||||||
restore.Add(val.Key);
|
restore.Add(val.Key);
|
||||||
val.Value.IsEnabled = true;
|
val.Value.IsEnabled = true;
|
||||||
}
|
}
|
||||||
@ -116,24 +138,29 @@ namespace FreeSql {
|
|||||||
return new UsingAny(() => this.Disable(restore.ToArray()));
|
return new UsingAny(() => this.Disable(restore.ToArray()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsEnabled(string filterName) {
|
public bool IsEnabled(string filterName)
|
||||||
|
{
|
||||||
if (filterName == null) return false;
|
if (filterName == null) return false;
|
||||||
return _filters.TryGetValue(filterName, out var tryfi) ? tryfi.IsEnabled : false;
|
return _filters.TryGetValue(filterName, out var tryfi) ? tryfi.IsEnabled : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
~DataFilter() {
|
~DataFilter()
|
||||||
|
{
|
||||||
this.Dispose();
|
this.Dispose();
|
||||||
}
|
}
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
_filters.Clear();
|
_filters.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FluentDataFilter : IDisposable {
|
public class FluentDataFilter : IDisposable
|
||||||
|
{
|
||||||
|
|
||||||
internal List<(Type type, string name, LambdaExpression exp)> _filters = new List<(Type type, string name, LambdaExpression exp)>();
|
internal List<(Type type, string name, LambdaExpression exp)> _filters = new List<(Type type, string name, LambdaExpression exp)>();
|
||||||
|
|
||||||
public FluentDataFilter Apply<TEntity>(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp) where TEntity : class {
|
public FluentDataFilter Apply<TEntity>(string filterName, Expression<Func<TEntity, bool>> filterAndValidateExp) where TEntity : class
|
||||||
|
{
|
||||||
if (filterName == null)
|
if (filterName == null)
|
||||||
throw new ArgumentNullException(nameof(filterName));
|
throw new ArgumentNullException(nameof(filterName));
|
||||||
if (filterAndValidateExp == null) return this;
|
if (filterAndValidateExp == null) return this;
|
||||||
@ -142,10 +169,12 @@ namespace FreeSql {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
~FluentDataFilter() {
|
~FluentDataFilter()
|
||||||
|
{
|
||||||
this.Dispose();
|
this.Dispose();
|
||||||
}
|
}
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
_filters.Clear();
|
_filters.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,23 +5,29 @@ using System.Linq;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
|
||||||
internal class DataFilterUtil {
|
internal class DataFilterUtil
|
||||||
|
{
|
||||||
|
|
||||||
internal static Action<FluentDataFilter> _globalDataFilter;
|
internal static Action<FluentDataFilter> _globalDataFilter;
|
||||||
|
|
||||||
static ConcurrentDictionary<Type, Delegate> _dicSetRepositoryDataFilterApplyDataFilterFunc = new ConcurrentDictionary<Type, Delegate>();
|
static ConcurrentDictionary<Type, Delegate> _dicSetRepositoryDataFilterApplyDataFilterFunc = new ConcurrentDictionary<Type, Delegate>();
|
||||||
static ConcurrentDictionary<Type, ConcurrentDictionary<string, bool>> _dicSetRepositoryDataFilterConvertFilterNotExists = new ConcurrentDictionary<Type, ConcurrentDictionary<string, bool>>();
|
static ConcurrentDictionary<Type, ConcurrentDictionary<string, bool>> _dicSetRepositoryDataFilterConvertFilterNotExists = new ConcurrentDictionary<Type, ConcurrentDictionary<string, bool>>();
|
||||||
internal static void SetRepositoryDataFilter(object repos, Action<FluentDataFilter> scopedDataFilter) {
|
internal static void SetRepositoryDataFilter(object repos, Action<FluentDataFilter> scopedDataFilter)
|
||||||
if (scopedDataFilter != null) {
|
{
|
||||||
|
if (scopedDataFilter != null)
|
||||||
|
{
|
||||||
SetRepositoryDataFilter(repos, null);
|
SetRepositoryDataFilter(repos, null);
|
||||||
}
|
}
|
||||||
if (scopedDataFilter == null) {
|
if (scopedDataFilter == null)
|
||||||
|
{
|
||||||
scopedDataFilter = _globalDataFilter;
|
scopedDataFilter = _globalDataFilter;
|
||||||
}
|
}
|
||||||
if (scopedDataFilter == null) return;
|
if (scopedDataFilter == null) return;
|
||||||
using (var globalFilter = new FluentDataFilter()) {
|
using (var globalFilter = new FluentDataFilter())
|
||||||
|
{
|
||||||
scopedDataFilter(globalFilter);
|
scopedDataFilter(globalFilter);
|
||||||
|
|
||||||
var type = repos.GetType();
|
var type = repos.GetType();
|
||||||
@ -30,18 +36,22 @@ namespace FreeSql {
|
|||||||
|
|
||||||
var notExists = _dicSetRepositoryDataFilterConvertFilterNotExists.GetOrAdd(type, t => new ConcurrentDictionary<string, bool>());
|
var notExists = _dicSetRepositoryDataFilterConvertFilterNotExists.GetOrAdd(type, t => new ConcurrentDictionary<string, bool>());
|
||||||
var newFilter = new Dictionary<string, LambdaExpression>();
|
var newFilter = new Dictionary<string, LambdaExpression>();
|
||||||
foreach (var gf in globalFilter._filters) {
|
foreach (var gf in globalFilter._filters)
|
||||||
|
{
|
||||||
if (notExists.ContainsKey(gf.name)) continue;
|
if (notExists.ContainsKey(gf.name)) continue;
|
||||||
|
|
||||||
LambdaExpression newExp = null;
|
LambdaExpression newExp = null;
|
||||||
var filterParameter1 = Expression.Parameter(entityType, gf.exp.Parameters[0].Name);
|
var filterParameter1 = Expression.Parameter(entityType, gf.exp.Parameters[0].Name);
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
newExp = Expression.Lambda(
|
newExp = Expression.Lambda(
|
||||||
typeof(Func<,>).MakeGenericType(entityType, typeof(bool)),
|
typeof(Func<,>).MakeGenericType(entityType, typeof(bool)),
|
||||||
new ReplaceVisitor().Modify(gf.exp.Body, filterParameter1),
|
new ReplaceVisitor().Modify(gf.exp.Body, filterParameter1),
|
||||||
filterParameter1
|
filterParameter1
|
||||||
);
|
);
|
||||||
} catch {
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
notExists.TryAdd(gf.name, true); //防止第二次错误
|
notExists.TryAdd(gf.name, true); //防止第二次错误
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -49,7 +59,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
if (newFilter.Any() == false) return;
|
if (newFilter.Any() == false) return;
|
||||||
|
|
||||||
var del = _dicSetRepositoryDataFilterApplyDataFilterFunc.GetOrAdd(type, t => {
|
var del = _dicSetRepositoryDataFilterApplyDataFilterFunc.GetOrAdd(type, t =>
|
||||||
|
{
|
||||||
var reposParameter = Expression.Parameter(type);
|
var reposParameter = Expression.Parameter(type);
|
||||||
var nameParameter = Expression.Parameter(typeof(string));
|
var nameParameter = Expression.Parameter(typeof(string));
|
||||||
var expressionParameter = Expression.Parameter(
|
var expressionParameter = Expression.Parameter(
|
||||||
@ -64,7 +75,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
).Compile();
|
).Compile();
|
||||||
});
|
});
|
||||||
foreach (var nf in newFilter) {
|
foreach (var nf in newFilter)
|
||||||
|
{
|
||||||
del.DynamicInvoke(repos, nf.Key, nf.Value);
|
del.DynamicInvoke(repos, nf.Key, nf.Value);
|
||||||
}
|
}
|
||||||
newFilter.Clear();
|
newFilter.Clear();
|
||||||
@ -72,15 +84,18 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReplaceVisitor : ExpressionVisitor {
|
class ReplaceVisitor : ExpressionVisitor
|
||||||
|
{
|
||||||
private ParameterExpression parameter;
|
private ParameterExpression parameter;
|
||||||
|
|
||||||
public Expression Modify(Expression expression, ParameterExpression parameter) {
|
public Expression Modify(Expression expression, ParameterExpression parameter)
|
||||||
|
{
|
||||||
this.parameter = parameter;
|
this.parameter = parameter;
|
||||||
return Visit(expression);
|
return Visit(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Expression VisitMember(MemberExpression node) {
|
protected override Expression VisitMember(MemberExpression node)
|
||||||
|
{
|
||||||
if (node.Expression?.NodeType == ExpressionType.Parameter)
|
if (node.Expression?.NodeType == ExpressionType.Parameter)
|
||||||
return Expression.Property(parameter, node.Member.Name);
|
return Expression.Property(parameter, node.Member.Name);
|
||||||
return base.VisitMember(node);
|
return base.VisitMember(node);
|
||||||
|
@ -5,10 +5,13 @@ using System.Reflection;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public static class FreeSqlRepositoryDependencyInjection {
|
{
|
||||||
|
public static class FreeSqlRepositoryDependencyInjection
|
||||||
|
{
|
||||||
|
|
||||||
public static IServiceCollection AddFreeRepository(this IServiceCollection services, Action<FluentDataFilter> globalDataFilter = null, params Assembly[] assemblies) {
|
public static IServiceCollection AddFreeRepository(this IServiceCollection services, Action<FluentDataFilter> globalDataFilter = null, params Assembly[] assemblies)
|
||||||
|
{
|
||||||
|
|
||||||
DataFilterUtil._globalDataFilter = globalDataFilter;
|
DataFilterUtil._globalDataFilter = globalDataFilter;
|
||||||
|
|
||||||
@ -22,9 +25,12 @@ namespace FreeSql {
|
|||||||
services.AddScoped(typeof(BaseRepository<,>), typeof(DefaultRepository<,>));
|
services.AddScoped(typeof(BaseRepository<,>), typeof(DefaultRepository<,>));
|
||||||
services.AddScoped(typeof(DefaultRepository<,>));
|
services.AddScoped(typeof(DefaultRepository<,>));
|
||||||
|
|
||||||
if (assemblies?.Any() == true) {
|
if (assemblies?.Any() == true)
|
||||||
foreach(var asse in assemblies) {
|
{
|
||||||
foreach (var repos in asse.GetTypes().Where(a => a.IsAbstract == false && typeof(IBaseRepository).IsAssignableFrom(a))) {
|
foreach (var asse in assemblies)
|
||||||
|
{
|
||||||
|
foreach (var repos in asse.GetTypes().Where(a => a.IsAbstract == false && typeof(IBaseRepository).IsAssignableFrom(a)))
|
||||||
|
{
|
||||||
|
|
||||||
services.AddScoped(repos);
|
services.AddScoped(repos);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,8 @@ using System;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
public static class FreeSqlRepositoryExtenssions {
|
public static class FreeSqlRepositoryExtenssions
|
||||||
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 返回默认仓库类
|
/// 返回默认仓库类
|
||||||
@ -13,7 +14,8 @@ public static class FreeSqlRepositoryExtenssions {
|
|||||||
/// <param name="that"></param>
|
/// <param name="that"></param>
|
||||||
/// <param name="filter">数据过滤 + 验证</param>
|
/// <param name="filter">数据过滤 + 验证</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static DefaultRepository<TEntity, TKey> GetRepository<TEntity, TKey>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null) where TEntity : class {
|
public static DefaultRepository<TEntity, TKey> GetRepository<TEntity, TKey>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null) where TEntity : class
|
||||||
|
{
|
||||||
return new DefaultRepository<TEntity, TKey>(that, filter);
|
return new DefaultRepository<TEntity, TKey>(that, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,7 +26,8 @@ public static class FreeSqlRepositoryExtenssions {
|
|||||||
/// <param name="that"></param>
|
/// <param name="that"></param>
|
||||||
/// <param name="filter">数据过滤 + 验证</param>
|
/// <param name="filter">数据过滤 + 验证</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static BaseRepository<TEntity> GetRepository<TEntity>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null) where TEntity : class {
|
public static BaseRepository<TEntity> GetRepository<TEntity>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null) where TEntity : class
|
||||||
|
{
|
||||||
return new DefaultRepository<TEntity, int>(that, filter);
|
return new DefaultRepository<TEntity, int>(that, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +39,8 @@ public static class FreeSqlRepositoryExtenssions {
|
|||||||
/// <param name="filter">数据过滤 + 验证</param>
|
/// <param name="filter">数据过滤 + 验证</param>
|
||||||
/// <param name="asTable">分表规则,参数:旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository</param>
|
/// <param name="asTable">分表规则,参数:旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static GuidRepository<TEntity> GetGuidRepository<TEntity>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class {
|
public static GuidRepository<TEntity> GetGuidRepository<TEntity>(this IFreeSql that, Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class
|
||||||
|
{
|
||||||
return new GuidRepository<TEntity>(that, filter, asTable);
|
return new GuidRepository<TEntity>(that, filter, asTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,7 +52,8 @@ public static class FreeSqlRepositoryExtenssions {
|
|||||||
/// <param name="that"></param>
|
/// <param name="that"></param>
|
||||||
/// <param name="repos"></param>
|
/// <param name="repos"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static ISelect<TEntity> FromRepository<TEntity, T2>(this ISelect<TEntity> that, BaseRepository<T2> repos) where TEntity : class where T2 : class {
|
public static ISelect<TEntity> FromRepository<TEntity, T2>(this ISelect<TEntity> that, BaseRepository<T2> repos) where TEntity : class where T2 : class
|
||||||
|
{
|
||||||
var filters = (repos.DataFilter as DataFilter<T2>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (repos.DataFilter as DataFilter<T2>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) that.Where<T2>(filter.Value.Expression);
|
foreach (var filter in filters) that.Where<T2>(filter.Value.Expression);
|
||||||
return that.AsTable(repos.AsTableSelectInternal);
|
return that.AsTable(repos.AsTableSelectInternal);
|
||||||
@ -59,7 +64,8 @@ public static class FreeSqlRepositoryExtenssions {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="that"></param>
|
/// <param name="that"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static IRepositoryUnitOfWork CreateUnitOfWork(this IFreeSql that) {
|
public static IRepositoryUnitOfWork CreateUnitOfWork(this IFreeSql that)
|
||||||
|
{
|
||||||
return new RepositoryUnitOfWork(that);
|
return new RepositoryUnitOfWork(that);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,9 +4,11 @@ using System.Linq;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity>
|
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
internal RepositoryDbContext _dbPriv;
|
internal RepositoryDbContext _dbPriv;
|
||||||
internal RepositoryDbContext _db => _dbPriv ?? (_dbPriv = new RepositoryDbContext(Orm, this));
|
internal RepositoryDbContext _db => _dbPriv ?? (_dbPriv = new RepositoryDbContext(Orm, this));
|
||||||
@ -14,9 +16,11 @@ namespace FreeSql {
|
|||||||
internal RepositoryDbSet<TEntity> _dbset => _dbsetPriv ?? (_dbsetPriv = _db.Set<TEntity>() as RepositoryDbSet<TEntity>);
|
internal RepositoryDbSet<TEntity> _dbset => _dbsetPriv ?? (_dbsetPriv = _db.Set<TEntity>() as RepositoryDbSet<TEntity>);
|
||||||
public IDataFilter<TEntity> DataFilter { get; } = new DataFilter<TEntity>();
|
public IDataFilter<TEntity> DataFilter { get; } = new DataFilter<TEntity>();
|
||||||
Func<string, string> _asTableVal;
|
Func<string, string> _asTableVal;
|
||||||
protected Func<string, string> AsTable {
|
protected Func<string, string> AsTable
|
||||||
|
{
|
||||||
get => _asTableVal;
|
get => _asTableVal;
|
||||||
set {
|
set
|
||||||
|
{
|
||||||
_asTableVal = value;
|
_asTableVal = value;
|
||||||
AsTableSelect = value == null ? null : new Func<Type, string, string>((a, b) => a == EntityType ? value(b) : null);
|
AsTableSelect = value == null ? null : new Func<Type, string, string>((a, b) => a == EntityType ? value(b) : null);
|
||||||
}
|
}
|
||||||
@ -27,24 +31,30 @@ namespace FreeSql {
|
|||||||
|
|
||||||
protected void ApplyDataFilter(string name, Expression<Func<TEntity, bool>> exp) => DataFilter.Apply(name, exp);
|
protected void ApplyDataFilter(string name, Expression<Func<TEntity, bool>> exp) => DataFilter.Apply(name, exp);
|
||||||
|
|
||||||
protected BaseRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable = null) {
|
protected BaseRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable = null)
|
||||||
|
{
|
||||||
Orm = fsql;
|
Orm = fsql;
|
||||||
DataFilterUtil.SetRepositoryDataFilter(this, null);
|
DataFilterUtil.SetRepositoryDataFilter(this, null);
|
||||||
DataFilter.Apply("", filter);
|
DataFilter.Apply("", filter);
|
||||||
AsTable = asTable;
|
AsTable = asTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
~BaseRepository() {
|
~BaseRepository()
|
||||||
|
{
|
||||||
this.Dispose();
|
this.Dispose();
|
||||||
}
|
}
|
||||||
bool _isdisposed = false;
|
bool _isdisposed = false;
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
if (_isdisposed) return;
|
if (_isdisposed) return;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
_dbsetPriv?.Dispose();
|
_dbsetPriv?.Dispose();
|
||||||
_dbPriv?.Dispose();
|
_dbPriv?.Dispose();
|
||||||
this.DataFilter.Dispose();
|
this.DataFilter.Dispose();
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
_isdisposed = true;
|
_isdisposed = true;
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
@ -63,57 +73,69 @@ namespace FreeSql {
|
|||||||
public int Delete(Expression<Func<TEntity, bool>> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrows();
|
public int Delete(Expression<Func<TEntity, bool>> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrows();
|
||||||
public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrowsAsync();
|
public Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate) => _dbset.OrmDeleteInternal(null).Where(predicate).ExecuteAffrowsAsync();
|
||||||
|
|
||||||
public int Delete(TEntity entity) {
|
public int Delete(TEntity entity)
|
||||||
|
{
|
||||||
_dbset.Remove(entity);
|
_dbset.Remove(entity);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> DeleteAsync(TEntity entity) {
|
public Task<int> DeleteAsync(TEntity entity)
|
||||||
|
{
|
||||||
_dbset.Remove(entity);
|
_dbset.Remove(entity);
|
||||||
return _db.SaveChangesAsync();
|
return _db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
public int Delete(IEnumerable<TEntity> entitys) {
|
public int Delete(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
_dbset.RemoveRange(entitys);
|
_dbset.RemoveRange(entitys);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> DeleteAsync(IEnumerable<TEntity> entitys) {
|
public Task<int> DeleteAsync(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
_dbset.RemoveRange(entitys);
|
_dbset.RemoveRange(entitys);
|
||||||
return _db.SaveChangesAsync();
|
return _db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual TEntity Insert(TEntity entity) {
|
public virtual TEntity Insert(TEntity entity)
|
||||||
|
{
|
||||||
_dbset.Add(entity);
|
_dbset.Add(entity);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
async public virtual Task<TEntity> InsertAsync(TEntity entity) {
|
async public virtual Task<TEntity> InsertAsync(TEntity entity)
|
||||||
|
{
|
||||||
await _dbset.AddAsync(entity);
|
await _dbset.AddAsync(entity);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
public virtual List<TEntity> Insert(IEnumerable<TEntity> entitys) {
|
public virtual List<TEntity> Insert(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
_dbset.AddRange(entitys);
|
_dbset.AddRange(entitys);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entitys.ToList();
|
return entitys.ToList();
|
||||||
}
|
}
|
||||||
async public virtual Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys) {
|
async public virtual Task<List<TEntity>> InsertAsync(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
await _dbset.AddRangeAsync(entitys);
|
await _dbset.AddRangeAsync(entitys);
|
||||||
await _db.SaveChangesAsync();
|
await _db.SaveChangesAsync();
|
||||||
return entitys.ToList();
|
return entitys.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Update(TEntity entity) {
|
public int Update(TEntity entity)
|
||||||
|
{
|
||||||
_dbset.Update(entity);
|
_dbset.Update(entity);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> UpdateAsync(TEntity entity) {
|
public Task<int> UpdateAsync(TEntity entity)
|
||||||
|
{
|
||||||
_dbset.Update(entity);
|
_dbset.Update(entity);
|
||||||
return _db.SaveChangesAsync();
|
return _db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
public int Update(IEnumerable<TEntity> entitys) {
|
public int Update(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
_dbset.UpdateRange(entitys);
|
_dbset.UpdateRange(entitys);
|
||||||
return _db.SaveChanges();
|
return _db.SaveChanges();
|
||||||
}
|
}
|
||||||
public Task<int> UpdateAsync(IEnumerable<TEntity> entitys) {
|
public Task<int> UpdateAsync(IEnumerable<TEntity> entitys)
|
||||||
|
{
|
||||||
_dbset.UpdateRange(entitys);
|
_dbset.UpdateRange(entitys);
|
||||||
return _db.SaveChangesAsync();
|
return _db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
@ -122,12 +144,14 @@ namespace FreeSql {
|
|||||||
public void Attach(IEnumerable<TEntity> data) => _db.AttachRange(data);
|
public void Attach(IEnumerable<TEntity> data) => _db.AttachRange(data);
|
||||||
public void FlushState() => _dbset.FlushState();
|
public void FlushState() => _dbset.FlushState();
|
||||||
|
|
||||||
public TEntity InsertOrUpdate(TEntity entity) {
|
public TEntity InsertOrUpdate(TEntity entity)
|
||||||
|
{
|
||||||
_dbset.AddOrUpdate(entity);
|
_dbset.AddOrUpdate(entity);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
async public Task<TEntity> InsertOrUpdateAsync(TEntity entity) {
|
async public Task<TEntity> InsertOrUpdateAsync(TEntity entity)
|
||||||
|
{
|
||||||
await _dbset.AddOrUpdateAsync(entity);
|
await _dbset.AddOrUpdateAsync(entity);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
return entity;
|
return entity;
|
||||||
@ -135,17 +159,21 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract class BaseRepository<TEntity, TKey> : BaseRepository<TEntity>, IBaseRepository<TEntity, TKey>
|
public abstract class BaseRepository<TEntity, TKey> : BaseRepository<TEntity>, IBaseRepository<TEntity, TKey>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
public BaseRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable = null) : base(fsql, filter, asTable) {
|
public BaseRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable = null) : base(fsql, filter, asTable)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Delete(TKey id) {
|
public int Delete(TKey id)
|
||||||
|
{
|
||||||
var stateKey = string.Concat(id);
|
var stateKey = string.Concat(id);
|
||||||
_dbset._statesInternal.TryRemove(stateKey, out var trystate);
|
_dbset._statesInternal.TryRemove(stateKey, out var trystate);
|
||||||
return _dbset.OrmDeleteInternal(id).ExecuteAffrows();
|
return _dbset.OrmDeleteInternal(id).ExecuteAffrows();
|
||||||
}
|
}
|
||||||
public Task<int> DeleteAsync(TKey id) {
|
public Task<int> DeleteAsync(TKey id)
|
||||||
|
{
|
||||||
var stateKey = string.Concat(id);
|
var stateKey = string.Concat(id);
|
||||||
_dbset._statesInternal.TryRemove(stateKey, out var trystate);
|
_dbset._statesInternal.TryRemove(stateKey, out var trystate);
|
||||||
return _dbset.OrmDeleteInternal(id).ExecuteAffrowsAsync();
|
return _dbset.OrmDeleteInternal(id).ExecuteAffrowsAsync();
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
public class DefaultRepository<TEntity, TKey> :
|
public class DefaultRepository<TEntity, TKey> :
|
||||||
BaseRepository<TEntity, TKey>
|
BaseRepository<TEntity, TKey>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
public DefaultRepository(IFreeSql fsql) : base(fsql, null, null) {
|
public DefaultRepository(IFreeSql fsql) : base(fsql, null, null)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefaultRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter) : base(fsql, filter, null) {
|
public DefaultRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter) : base(fsql, filter, null)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,19 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
public class GuidRepository<TEntity> :
|
public class GuidRepository<TEntity> :
|
||||||
BaseRepository<TEntity, Guid>
|
BaseRepository<TEntity, Guid>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
public GuidRepository(IFreeSql fsql) : this(fsql, null, null) {
|
public GuidRepository(IFreeSql fsql) : this(fsql, null, null)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
public GuidRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable) : base(fsql, filter, asTable) {
|
public GuidRepository(IFreeSql fsql, Expression<Func<TEntity, bool>> filter, Func<string, string> asTable) : base(fsql, filter, asTable)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,11 @@
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
|
||||||
public interface IBaseRepository : IDisposable {
|
public interface IBaseRepository : IDisposable
|
||||||
|
{
|
||||||
Type EntityType { get; }
|
Type EntityType { get; }
|
||||||
IUnitOfWork UnitOfWork { get; set; }
|
IUnitOfWork UnitOfWork { get; set; }
|
||||||
IFreeSql Orm { get; }
|
IFreeSql Orm { get; }
|
||||||
@ -18,13 +20,15 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface IBaseRepository<TEntity> : IReadOnlyRepository<TEntity>, IBasicRepository<TEntity>
|
public interface IBaseRepository<TEntity> : IReadOnlyRepository<TEntity>, IBasicRepository<TEntity>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
int Delete(Expression<Func<TEntity, bool>> predicate);
|
int Delete(Expression<Func<TEntity, bool>> predicate);
|
||||||
|
|
||||||
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate);
|
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IBaseRepository<TEntity, TKey> : IBaseRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>, IBasicRepository<TEntity, TKey>
|
public interface IBaseRepository<TEntity, TKey> : IBaseRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>, IBasicRepository<TEntity, TKey>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
public interface IBasicRepository<TEntity> : IReadOnlyRepository<TEntity>
|
public interface IBasicRepository<TEntity> : IReadOnlyRepository<TEntity>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
TEntity Insert(TEntity entity);
|
TEntity Insert(TEntity entity);
|
||||||
List<TEntity> Insert(IEnumerable<TEntity> entitys);
|
List<TEntity> Insert(IEnumerable<TEntity> entitys);
|
||||||
Task<TEntity> InsertAsync(TEntity entity);
|
Task<TEntity> InsertAsync(TEntity entity);
|
||||||
@ -36,7 +38,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface IBasicRepository<TEntity, TKey> : IBasicRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>
|
public interface IBasicRepository<TEntity, TKey> : IBasicRepository<TEntity>, IReadOnlyRepository<TEntity, TKey>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
int Delete(TKey id);
|
int Delete(TKey id);
|
||||||
|
|
||||||
Task<int> DeleteAsync(TKey id);
|
Task<int> DeleteAsync(TKey id);
|
||||||
|
@ -2,9 +2,11 @@
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
|
{
|
||||||
public interface IReadOnlyRepository<TEntity> : IBaseRepository
|
public interface IReadOnlyRepository<TEntity> : IBaseRepository
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
|
|
||||||
IDataFilter<TEntity> DataFilter { get; }
|
IDataFilter<TEntity> DataFilter { get; }
|
||||||
|
|
||||||
@ -15,7 +17,8 @@ namespace FreeSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface IReadOnlyRepository<TEntity, TKey> : IReadOnlyRepository<TEntity>
|
public interface IReadOnlyRepository<TEntity, TKey> : IReadOnlyRepository<TEntity>
|
||||||
where TEntity : class {
|
where TEntity : class
|
||||||
|
{
|
||||||
TEntity Get(TKey id);
|
TEntity Get(TKey id);
|
||||||
|
|
||||||
Task<TEntity> GetAsync(TKey id);
|
Task<TEntity> GetAsync(TKey id);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
|
||||||
namespace FreeSql.Extensions.EntityUtil {
|
namespace FreeSql.Extensions.EntityUtil
|
||||||
public static class TempExtensions {
|
{
|
||||||
|
public static class TempExtensions
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,10 @@
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
public interface IUnitOfWork : IDisposable {
|
{
|
||||||
|
public interface IUnitOfWork : IDisposable
|
||||||
|
{
|
||||||
|
|
||||||
DbTransaction GetOrBeginTransaction(bool isCreate = true);
|
DbTransaction GetOrBeginTransaction(bool isCreate = true);
|
||||||
|
|
||||||
|
@ -3,18 +3,22 @@ using System;
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql
|
||||||
class UnitOfWork : IUnitOfWork {
|
{
|
||||||
|
class UnitOfWork : IUnitOfWork
|
||||||
|
{
|
||||||
|
|
||||||
protected IFreeSql _fsql;
|
protected IFreeSql _fsql;
|
||||||
protected Object<DbConnection> _conn;
|
protected Object<DbConnection> _conn;
|
||||||
protected DbTransaction _tran;
|
protected DbTransaction _tran;
|
||||||
|
|
||||||
public UnitOfWork(IFreeSql fsql) {
|
public UnitOfWork(IFreeSql fsql)
|
||||||
|
{
|
||||||
_fsql = fsql;
|
_fsql = fsql;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReturnObject() {
|
void ReturnObject()
|
||||||
|
{
|
||||||
_fsql.Ado.MasterPool.Return(_conn);
|
_fsql.Ado.MasterPool.Return(_conn);
|
||||||
_tran = null;
|
_tran = null;
|
||||||
_conn = null;
|
_conn = null;
|
||||||
@ -49,7 +53,8 @@ namespace FreeSql {
|
|||||||
|
|
||||||
public IsolationLevel? IsolationLevel { get; set; }
|
public IsolationLevel? IsolationLevel { get; set; }
|
||||||
|
|
||||||
public DbTransaction GetOrBeginTransaction(bool isCreate = true) {
|
public DbTransaction GetOrBeginTransaction(bool isCreate = true)
|
||||||
|
{
|
||||||
|
|
||||||
if (_tran != null) return _tran;
|
if (_tran != null) return _tran;
|
||||||
if (isCreate == false) return null;
|
if (isCreate == false) return null;
|
||||||
@ -57,44 +62,62 @@ namespace FreeSql {
|
|||||||
if (_conn != null) _fsql.Ado.MasterPool.Return(_conn);
|
if (_conn != null) _fsql.Ado.MasterPool.Return(_conn);
|
||||||
|
|
||||||
_conn = _fsql.Ado.MasterPool.Get();
|
_conn = _fsql.Ado.MasterPool.Get();
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
_tran = IsolationLevel == null ?
|
_tran = IsolationLevel == null ?
|
||||||
_conn.Value.BeginTransaction() :
|
_conn.Value.BeginTransaction() :
|
||||||
_conn.Value.BeginTransaction(IsolationLevel.Value);
|
_conn.Value.BeginTransaction(IsolationLevel.Value);
|
||||||
} catch {
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
ReturnObject();
|
ReturnObject();
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
return _tran;
|
return _tran;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Commit() {
|
public void Commit()
|
||||||
if (_tran != null) {
|
{
|
||||||
try {
|
if (_tran != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
_tran.Commit();
|
_tran.Commit();
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
ReturnObject();
|
ReturnObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Rollback() {
|
public void Rollback()
|
||||||
if (_tran != null) {
|
{
|
||||||
try {
|
if (_tran != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
_tran.Rollback();
|
_tran.Rollback();
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
ReturnObject();
|
ReturnObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
~UnitOfWork() {
|
~UnitOfWork()
|
||||||
|
{
|
||||||
this.Dispose();
|
this.Dispose();
|
||||||
}
|
}
|
||||||
bool _isdisposed = false;
|
bool _isdisposed = false;
|
||||||
public void Dispose() {
|
public void Dispose()
|
||||||
|
{
|
||||||
if (_isdisposed) return;
|
if (_isdisposed) return;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
this.Rollback();
|
this.Rollback();
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
_isdisposed = true;
|
_isdisposed = true;
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests {
|
namespace FreeSql.Tests
|
||||||
public class RepositoryTests {
|
{
|
||||||
|
public class RepositoryTests
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddUpdate() {
|
public void AddUpdate()
|
||||||
|
{
|
||||||
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
||||||
|
|
||||||
var item = repos.Insert(new AddUpdateInfo());
|
var item = repos.Insert(new AddUpdateInfo());
|
||||||
@ -26,7 +29,8 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UpdateAttach() {
|
public void UpdateAttach()
|
||||||
|
{
|
||||||
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
||||||
|
|
||||||
var item = new AddUpdateInfo { Id = Guid.NewGuid() };
|
var item = new AddUpdateInfo { Id = Guid.NewGuid() };
|
||||||
@ -44,7 +48,8 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UpdateWhenNotExists() {
|
public void UpdateWhenNotExists()
|
||||||
|
{
|
||||||
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
||||||
|
|
||||||
var item = new AddUpdateInfo { Id = Guid.NewGuid() };
|
var item = new AddUpdateInfo { Id = Guid.NewGuid() };
|
||||||
@ -53,7 +58,8 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Update() {
|
public void Update()
|
||||||
|
{
|
||||||
g.sqlite.Insert(new AddUpdateInfo()).ExecuteAffrows();
|
g.sqlite.Insert(new AddUpdateInfo()).ExecuteAffrows();
|
||||||
|
|
||||||
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
var repos = g.sqlite.GetGuidRepository<AddUpdateInfo>();
|
||||||
@ -65,7 +71,8 @@ namespace FreeSql.Tests {
|
|||||||
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
|
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AddUpdateInfo {
|
public class AddUpdateInfo
|
||||||
|
{
|
||||||
|
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
@ -74,16 +81,20 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UnitOfWorkRepository() {
|
public void UnitOfWorkRepository()
|
||||||
foreach (var fsql in new[] { g.sqlite, /*g.mysql, g.pgsql, g.oracle, g.sqlserver*/ }) {
|
{
|
||||||
|
foreach (var fsql in new[] { g.sqlite, /*g.mysql, g.pgsql, g.oracle, g.sqlserver*/ })
|
||||||
|
{
|
||||||
|
|
||||||
fsql.CodeFirst.ConfigEntity<FlowModel>(f => {
|
fsql.CodeFirst.ConfigEntity<FlowModel>(f =>
|
||||||
|
{
|
||||||
f.Property(b => b.UserId).IsPrimary(true);
|
f.Property(b => b.UserId).IsPrimary(true);
|
||||||
f.Property(b => b.Id).IsPrimary(true).IsIdentity(true);
|
f.Property(b => b.Id).IsPrimary(true).IsIdentity(true);
|
||||||
f.Property(b => b.Name).IsNullable(false);
|
f.Property(b => b.Name).IsNullable(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowModel flow = new FlowModel() {
|
FlowModel flow = new FlowModel()
|
||||||
|
{
|
||||||
CreateTime = DateTime.Now,
|
CreateTime = DateTime.Now,
|
||||||
Name = "aaa",
|
Name = "aaa",
|
||||||
LastModifyTime = DateTime.Now,
|
LastModifyTime = DateTime.Now,
|
||||||
@ -93,13 +104,15 @@ namespace FreeSql.Tests {
|
|||||||
flowRepos.Insert(flow);
|
flowRepos.Insert(flow);
|
||||||
|
|
||||||
//事务添加
|
//事务添加
|
||||||
flow = new FlowModel() {
|
flow = new FlowModel()
|
||||||
|
{
|
||||||
CreateTime = DateTime.Now,
|
CreateTime = DateTime.Now,
|
||||||
Name = "aaa",
|
Name = "aaa",
|
||||||
LastModifyTime = DateTime.Now,
|
LastModifyTime = DateTime.Now,
|
||||||
UserId = 1,
|
UserId = 1,
|
||||||
};
|
};
|
||||||
using (var uow = fsql.CreateUnitOfWork()) {
|
using (var uow = fsql.CreateUnitOfWork())
|
||||||
|
{
|
||||||
flowRepos = uow.GetRepository<FlowModel>();
|
flowRepos = uow.GetRepository<FlowModel>();
|
||||||
flowRepos.Insert(flow);
|
flowRepos.Insert(flow);
|
||||||
uow.Commit();
|
uow.Commit();
|
||||||
@ -112,7 +125,8 @@ namespace FreeSql.Tests {
|
|||||||
{
|
{
|
||||||
foreach (var fsql in new[] { g.sqlite, })
|
foreach (var fsql in new[] { g.sqlite, })
|
||||||
{
|
{
|
||||||
fsql.CodeFirst.ConfigEntity<FlowModel>(f => {
|
fsql.CodeFirst.ConfigEntity<FlowModel>(f =>
|
||||||
|
{
|
||||||
f.Property(b => b.UserId).IsPrimary(true);
|
f.Property(b => b.UserId).IsPrimary(true);
|
||||||
f.Property(b => b.Id).IsPrimary(true).IsIdentity(true);
|
f.Property(b => b.Id).IsPrimary(true).IsIdentity(true);
|
||||||
f.Property(b => b.Name).IsNullable(false);
|
f.Property(b => b.Name).IsNullable(false);
|
||||||
@ -129,7 +143,7 @@ namespace FreeSql.Tests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//清理掉数据库中已存在的数据,为了接下来的插入测试
|
//清理掉数据库中已存在的数据,为了接下来的插入测试
|
||||||
flowRepos.Delete(a => a.UserId == 1 &&a.Name== "aaa");
|
flowRepos.Delete(a => a.UserId == 1 && a.Name == "aaa");
|
||||||
|
|
||||||
using (var uow = fsql.CreateUnitOfWork())
|
using (var uow = fsql.CreateUnitOfWork())
|
||||||
{
|
{
|
||||||
@ -149,7 +163,7 @@ namespace FreeSql.Tests {
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void UnitOfWorkRepositoryWithDisableAfterInsert()
|
public void UnitOfWorkRepositoryWithDisableAfterInsert()
|
||||||
{
|
{
|
||||||
foreach (var fsql in new[] {g.sqlite,})
|
foreach (var fsql in new[] { g.sqlite, })
|
||||||
{
|
{
|
||||||
fsql.CodeFirst.ConfigEntity<FlowModel>(f =>
|
fsql.CodeFirst.ConfigEntity<FlowModel>(f =>
|
||||||
{
|
{
|
||||||
@ -227,7 +241,8 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public partial class FlowModel {
|
public partial class FlowModel
|
||||||
|
{
|
||||||
public int UserId { get; set; }
|
public int UserId { get; set; }
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? ParentId { get; set; }
|
public int? ParentId { get; set; }
|
||||||
@ -238,7 +253,8 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsType() {
|
public void AsType()
|
||||||
|
{
|
||||||
g.sqlite.Insert(new AddUpdateInfo()).ExecuteAffrows();
|
g.sqlite.Insert(new AddUpdateInfo()).ExecuteAffrows();
|
||||||
|
|
||||||
var repos = g.sqlite.GetGuidRepository<object>();
|
var repos = g.sqlite.GetGuidRepository<object>();
|
||||||
|
@ -6,53 +6,64 @@ using Xunit;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
namespace FreeSql.Tests {
|
namespace FreeSql.Tests
|
||||||
public class UnitTest1 {
|
{
|
||||||
|
public class UnitTest1
|
||||||
|
{
|
||||||
|
|
||||||
class testenumWhere {
|
class testenumWhere
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public testenumWhereType type { get; set; }
|
public testenumWhereType type { get; set; }
|
||||||
}
|
}
|
||||||
public enum testenumWhereType { Menu, Class, Blaaa }
|
public enum testenumWhereType { Menu, Class, Blaaa }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_ManyToMany() {
|
public void Include_ManyToMany()
|
||||||
|
{
|
||||||
|
|
||||||
g.sqlite.CodeFirst.SyncStructure<Song_tag>();
|
g.sqlite.CodeFirst.SyncStructure<Song_tag>();
|
||||||
g.sqlite.CodeFirst.SyncStructure<Tag>();
|
g.sqlite.CodeFirst.SyncStructure<Tag>();
|
||||||
g.sqlite.CodeFirst.SyncStructure<Song>();
|
g.sqlite.CodeFirst.SyncStructure<Song>();
|
||||||
|
|
||||||
using (var ctx = g.sqlite.CreateDbContext()) {
|
using (var ctx = g.sqlite.CreateDbContext())
|
||||||
|
{
|
||||||
|
|
||||||
var songs = ctx.Set<Song>().Select
|
var songs = ctx.Set<Song>().Select
|
||||||
.IncludeMany(a => a.Tags)
|
.IncludeMany(a => a.Tags)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var tag1 = new Tag {
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_01_中国"
|
Name = "test_manytoMany_01_中国"
|
||||||
};
|
};
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_02_美国"
|
Name = "test_manytoMany_02_美国"
|
||||||
};
|
};
|
||||||
var tag3 = new Tag {
|
var tag3 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_03_日本"
|
Name = "test_manytoMany_03_日本"
|
||||||
};
|
};
|
||||||
ctx.AddRange(new[] { tag1, tag2, tag3 });
|
ctx.AddRange(new[] { tag1, tag2, tag3 });
|
||||||
|
|
||||||
var song1 = new Song {
|
var song1 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_01_我是中国人.mp3",
|
Title = "test_manytoMany_01_我是中国人.mp3",
|
||||||
Url = "http://ww.baidu.com/"
|
Url = "http://ww.baidu.com/"
|
||||||
};
|
};
|
||||||
var song2 = new Song {
|
var song2 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_02_爱你一万年.mp3",
|
Title = "test_manytoMany_02_爱你一万年.mp3",
|
||||||
Url = "http://ww.163.com/"
|
Url = "http://ww.163.com/"
|
||||||
};
|
};
|
||||||
var song3 = new Song {
|
var song3 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_03_千年等一回.mp3",
|
Title = "test_manytoMany_03_千年等一回.mp3",
|
||||||
Url = "http://ww.sina.com/"
|
Url = "http://ww.sina.com/"
|
||||||
@ -74,9 +85,11 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Add() {
|
public void Add()
|
||||||
|
{
|
||||||
|
|
||||||
g.sqlite.SetDbContextOptions(opt => {
|
g.sqlite.SetDbContextOptions(opt =>
|
||||||
|
{
|
||||||
//opt.EnableAddOrUpdateNavigateList = false;
|
//opt.EnableAddOrUpdateNavigateList = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -87,11 +100,13 @@ namespace FreeSql.Tests {
|
|||||||
|
|
||||||
//支持 1对多 联级保存
|
//支持 1对多 联级保存
|
||||||
|
|
||||||
using (var ctx = new FreeContext(g.sqlite)) {
|
using (var ctx = new FreeContext(g.sqlite))
|
||||||
|
{
|
||||||
|
|
||||||
var tags = ctx.Set<Tag>().Select.IncludeMany(a => a.Tags).ToList();
|
var tags = ctx.Set<Tag>().Select.IncludeMany(a => a.Tags).ToList();
|
||||||
|
|
||||||
var tag = new Tag {
|
var tag = new Tag
|
||||||
|
{
|
||||||
Name = "testaddsublist",
|
Name = "testaddsublist",
|
||||||
Tags = new[] {
|
Tags = new[] {
|
||||||
new Tag { Name = "sub1" },
|
new Tag { Name = "sub1" },
|
||||||
@ -110,10 +125,12 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Update() {
|
public void Update()
|
||||||
|
{
|
||||||
//查询 1对多,再联级保存
|
//查询 1对多,再联级保存
|
||||||
|
|
||||||
using (var ctx = new FreeContext(g.sqlite)) {
|
using (var ctx = new FreeContext(g.sqlite))
|
||||||
|
{
|
||||||
|
|
||||||
var tag = ctx.Set<Tag>().Select.First();
|
var tag = ctx.Set<Tag>().Select.First();
|
||||||
tag.Tags.Add(new Tag { Name = "sub3" });
|
tag.Tags.Add(new Tag { Name = "sub3" });
|
||||||
@ -122,7 +139,8 @@ namespace FreeSql.Tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Song {
|
public class Song
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public DateTime? Create_time { get; set; }
|
public DateTime? Create_time { get; set; }
|
||||||
@ -135,7 +153,8 @@ namespace FreeSql.Tests {
|
|||||||
[Column(IsVersion = true)]
|
[Column(IsVersion = true)]
|
||||||
public long versionRow { get; set; }
|
public long versionRow { get; set; }
|
||||||
}
|
}
|
||||||
public class Song_tag {
|
public class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
public virtual Song Song { get; set; }
|
public virtual Song Song { get; set; }
|
||||||
|
|
||||||
@ -143,7 +162,8 @@ namespace FreeSql.Tests {
|
|||||||
public virtual Tag Tag { get; set; }
|
public virtual Tag Tag { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Tag {
|
public class Tag
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Parent_id { get; set; }
|
public int? Parent_id { get; set; }
|
||||||
|
@ -4,16 +4,19 @@ using System.Diagnostics;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
|
||||||
public class g {
|
public class g
|
||||||
|
{
|
||||||
|
|
||||||
static Lazy<IFreeSql> sqlserverLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
static Lazy<IFreeSql> sqlserverLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
||||||
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=10")
|
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=10")
|
||||||
.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
.UseMonitorCommand(
|
.UseMonitorCommand(
|
||||||
cmd => {
|
cmd =>
|
||||||
|
{
|
||||||
Trace.WriteLine(cmd.CommandText);
|
Trace.WriteLine(cmd.CommandText);
|
||||||
}, //监听SQL命令对象,在执行前
|
}, //监听SQL命令对象,在执行前
|
||||||
(cmd, traceLog) => {
|
(cmd, traceLog) =>
|
||||||
|
{
|
||||||
Console.WriteLine(traceLog);
|
Console.WriteLine(traceLog);
|
||||||
}) //监听SQL命令对象,在执行后
|
}) //监听SQL命令对象,在执行后
|
||||||
.UseLazyLoading(true)
|
.UseLazyLoading(true)
|
||||||
@ -25,10 +28,12 @@ public class g {
|
|||||||
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
|
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
|
||||||
.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
.UseMonitorCommand(
|
.UseMonitorCommand(
|
||||||
cmd => {
|
cmd =>
|
||||||
|
{
|
||||||
Trace.WriteLine(cmd.CommandText);
|
Trace.WriteLine(cmd.CommandText);
|
||||||
}, //监听SQL命令对象,在执行前
|
}, //监听SQL命令对象,在执行前
|
||||||
(cmd, traceLog) => {
|
(cmd, traceLog) =>
|
||||||
|
{
|
||||||
Console.WriteLine(traceLog);
|
Console.WriteLine(traceLog);
|
||||||
}) //监听SQL命令对象,在执行后
|
}) //监听SQL命令对象,在执行后
|
||||||
.UseLazyLoading(true)
|
.UseLazyLoading(true)
|
||||||
@ -42,10 +47,12 @@ public class g {
|
|||||||
.UseSyncStructureToLower(true)
|
.UseSyncStructureToLower(true)
|
||||||
.UseLazyLoading(true)
|
.UseLazyLoading(true)
|
||||||
.UseMonitorCommand(
|
.UseMonitorCommand(
|
||||||
cmd => {
|
cmd =>
|
||||||
|
{
|
||||||
Trace.WriteLine(cmd.CommandText);
|
Trace.WriteLine(cmd.CommandText);
|
||||||
}, //监听SQL命令对象,在执行前
|
}, //监听SQL命令对象,在执行前
|
||||||
(cmd, traceLog) => {
|
(cmd, traceLog) =>
|
||||||
|
{
|
||||||
Console.WriteLine(traceLog);
|
Console.WriteLine(traceLog);
|
||||||
}) //监听SQL命令对象,在执行后
|
}) //监听SQL命令对象,在执行后
|
||||||
.UseNoneCommandParameter(true)
|
.UseNoneCommandParameter(true)
|
||||||
@ -60,10 +67,12 @@ public class g {
|
|||||||
.UseNoneCommandParameter(true)
|
.UseNoneCommandParameter(true)
|
||||||
|
|
||||||
.UseMonitorCommand(
|
.UseMonitorCommand(
|
||||||
cmd => {
|
cmd =>
|
||||||
|
{
|
||||||
Trace.WriteLine(cmd.CommandText);
|
Trace.WriteLine(cmd.CommandText);
|
||||||
}, //监听SQL命令对象,在执行前
|
}, //监听SQL命令对象,在执行前
|
||||||
(cmd, traceLog) => {
|
(cmd, traceLog) =>
|
||||||
|
{
|
||||||
Console.WriteLine(traceLog);
|
Console.WriteLine(traceLog);
|
||||||
}) //监听SQL命令对象,在执行后
|
}) //监听SQL命令对象,在执行后
|
||||||
.Build());
|
.Build());
|
||||||
@ -74,10 +83,12 @@ public class g {
|
|||||||
.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
.UseLazyLoading(true)
|
.UseLazyLoading(true)
|
||||||
.UseMonitorCommand(
|
.UseMonitorCommand(
|
||||||
cmd => {
|
cmd =>
|
||||||
|
{
|
||||||
Trace.WriteLine(cmd.CommandText);
|
Trace.WriteLine(cmd.CommandText);
|
||||||
}, //监听SQL命令对象,在执行前
|
}, //监听SQL命令对象,在执行前
|
||||||
(cmd, traceLog) => {
|
(cmd, traceLog) =>
|
||||||
|
{
|
||||||
Console.WriteLine(traceLog);
|
Console.WriteLine(traceLog);
|
||||||
}) //监听SQL命令对象,在执行后
|
}) //监听SQL命令对象,在执行后
|
||||||
.UseNoneCommandParameter(true)
|
.UseNoneCommandParameter(true)
|
||||||
|
@ -9,17 +9,21 @@ using System.Collections.Generic;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace FreeSql.Tests.PerformanceTest {
|
namespace FreeSql.Tests.PerformanceTest
|
||||||
public class MySqlAdoTest {
|
{
|
||||||
|
public class MySqlAdoTest
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Query() {
|
public void Query()
|
||||||
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var time = new Stopwatch();
|
var time = new Stopwatch();
|
||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<xxx> dplist1 = null;
|
List<xxx> dplist1 = null;
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist1 = Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song").ToList();
|
dplist1 = Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song").ToList();
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -27,7 +31,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<(int, string, string)> dplist2 = null;
|
List<(int, string, string)> dplist2 = null;
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist2 = Dapper.SqlMapper.Query<(int, string, string)>(conn.Value, "select * from song").ToList();
|
dplist2 = Dapper.SqlMapper.Query<(int, string, string)>(conn.Value, "select * from song").ToList();
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -35,7 +40,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<dynamic> dplist3 = null;
|
List<dynamic> dplist3 = null;
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist3 = Dapper.SqlMapper.Query<dynamic>(conn.Value, "select * from song").ToList();
|
dplist3 = Dapper.SqlMapper.Query<dynamic>(conn.Value, "select * from song").ToList();
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -69,14 +75,17 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void QueryLimit10() {
|
public void QueryLimit10()
|
||||||
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var time = new Stopwatch();
|
var time = new Stopwatch();
|
||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<xxx> dplist1 = new List<xxx>();
|
List<xxx> dplist1 = new List<xxx>();
|
||||||
for (var a = 0; a < 10000; a++) {
|
for (var a = 0; a < 10000; a++)
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
{
|
||||||
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist1.AddRange(Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song limit 10").ToList());
|
dplist1.AddRange(Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song limit 10").ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,8 +94,10 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<(int, string, string)> dplist2 = new List<(int, string, string)>();
|
List<(int, string, string)> dplist2 = new List<(int, string, string)>();
|
||||||
for (var a = 0; a < 10000; a++) {
|
for (var a = 0; a < 10000; a++)
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
{
|
||||||
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist2.AddRange(Dapper.SqlMapper.Query<(int, string, string)>(conn.Value, "select * from song limit 10").ToList());
|
dplist2.AddRange(Dapper.SqlMapper.Query<(int, string, string)>(conn.Value, "select * from song limit 10").ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,8 +106,10 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<dynamic> dplist3 = new List<dynamic>();
|
List<dynamic> dplist3 = new List<dynamic>();
|
||||||
for (var a = 0; a < 10000; a++) {
|
for (var a = 0; a < 10000; a++)
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
{
|
||||||
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist3.AddRange(Dapper.SqlMapper.Query<dynamic>(conn.Value, "select * from song limit 10").ToList());
|
dplist3.AddRange(Dapper.SqlMapper.Query<dynamic>(conn.Value, "select * from song limit 10").ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,7 +121,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<xxx> t3 = new List<xxx>();
|
List<xxx> t3 = new List<xxx>();
|
||||||
for (var a = 0; a < 10000; a++) {
|
for (var a = 0; a < 10000; a++)
|
||||||
|
{
|
||||||
t3.AddRange(g.mysql.Ado.Query<xxx>("select * from song limit 10"));
|
t3.AddRange(g.mysql.Ado.Query<xxx>("select * from song limit 10"));
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -116,7 +130,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<(int, string, string)> t4 = new List<(int, string, string)>();
|
List<(int, string, string)> t4 = new List<(int, string, string)>();
|
||||||
for (var a = 0; a < 10000; a++) {
|
for (var a = 0; a < 10000; a++)
|
||||||
|
{
|
||||||
t4.AddRange(g.mysql.Ado.Query<(int, string, string)>("select * from song limit 10"));
|
t4.AddRange(g.mysql.Ado.Query<(int, string, string)>("select * from song limit 10"));
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -124,7 +139,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<dynamic> t5 = new List<dynamic>();
|
List<dynamic> t5 = new List<dynamic>();
|
||||||
for (var a = 0; a < 10000; a++) {
|
for (var a = 0; a < 10000; a++)
|
||||||
|
{
|
||||||
t5.AddRange(g.mysql.Ado.Query<dynamic>("select * from song limit 10"));
|
t5.AddRange(g.mysql.Ado.Query<dynamic>("select * from song limit 10"));
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -133,7 +149,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToList() {
|
public void ToList()
|
||||||
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var time = new Stopwatch();
|
var time = new Stopwatch();
|
||||||
|
|
||||||
@ -146,7 +163,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
List<xxx> dplist1 = null;
|
List<xxx> dplist1 = null;
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist1 = Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song").ToList();
|
dplist1 = Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song").ToList();
|
||||||
}
|
}
|
||||||
time.Stop();
|
time.Stop();
|
||||||
@ -154,15 +172,18 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToListLimit10() {
|
public void ToListLimit10()
|
||||||
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var time = new Stopwatch();
|
var time = new Stopwatch();
|
||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
var t3Count = 0;
|
var t3Count = 0;
|
||||||
var p3 = Parallel.For(1, 50, b => {
|
var p3 = Parallel.For(1, 50, b =>
|
||||||
|
{
|
||||||
List<xxx> t3 = new List<xxx>();
|
List<xxx> t3 = new List<xxx>();
|
||||||
for (var a = 0; a < 1000; a++) {
|
for (var a = 0; a < 1000; a++)
|
||||||
|
{
|
||||||
t3.AddRange(g.mysql.Select<xxx>().Limit(50).ToList());
|
t3.AddRange(g.mysql.Select<xxx>().Limit(50).ToList());
|
||||||
}
|
}
|
||||||
Interlocked.Add(ref t3Count, t3.Count);
|
Interlocked.Add(ref t3Count, t3.Count);
|
||||||
@ -173,10 +194,13 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
|
|
||||||
time.Restart();
|
time.Restart();
|
||||||
var dplist1Count = 0;
|
var dplist1Count = 0;
|
||||||
var p1 = Parallel.For(1, 50, b => {
|
var p1 = Parallel.For(1, 50, b =>
|
||||||
|
{
|
||||||
List<xxx> dplist1 = new List<xxx>();
|
List<xxx> dplist1 = new List<xxx>();
|
||||||
for (var a = 0; a < 1000; a++) {
|
for (var a = 0; a < 1000; a++)
|
||||||
using (var conn = g.mysql.Ado.MasterPool.Get()) {
|
{
|
||||||
|
using (var conn = g.mysql.Ado.MasterPool.Get())
|
||||||
|
{
|
||||||
dplist1.AddRange(Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song limit 50").ToList());
|
dplist1.AddRange(Dapper.SqlMapper.Query<xxx>(conn.Value, "select * from song limit 50").ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +212,8 @@ namespace FreeSql.Tests.PerformanceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "song")]
|
[Table(Name = "song")]
|
||||||
class xxx {
|
class xxx
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
//public string Url { get; set; }
|
//public string Url { get; set; }
|
||||||
|
@ -3,7 +3,8 @@ using System.Collections.Generic;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
|
||||||
public class g {
|
public class g
|
||||||
|
{
|
||||||
|
|
||||||
public static IFreeSql mysql = new FreeSql.FreeSqlBuilder()
|
public static IFreeSql mysql = new FreeSql.FreeSqlBuilder()
|
||||||
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=100")
|
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=100")
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
public class MySqlDeleteTest {
|
{
|
||||||
|
public class MySqlDeleteTest
|
||||||
|
{
|
||||||
|
|
||||||
IDelete<Topic> delete => g.mysql.Delete<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDelete<Topic> delete => g.mysql.Delete<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,7 +22,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Dywhere() {
|
public void Dywhere()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
||||||
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).ToSql();
|
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).ToSql();
|
||||||
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
||||||
@ -35,7 +39,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql);
|
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -53,23 +58,27 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
|
|
||||||
var id = g.mysql.Insert<Topic>(new Topic { Title = "xxxx" }).ExecuteIdentity();
|
var id = g.mysql.Insert<Topic>(new Topic { Title = "xxxx" }).ExecuteIdentity();
|
||||||
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
|
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteDeleted() {
|
public void ExecuteDeleted()
|
||||||
|
{
|
||||||
|
|
||||||
//delete.Where(a => a.Id > 0).ExecuteDeleted();
|
//delete.Where(a => a.Id > 0).ExecuteDeleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
||||||
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "TopicAsTable").ToSql();
|
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "TopicAsTable").ToSql();
|
||||||
Assert.Equal("DELETE FROM `TopicAsTable` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
Assert.Equal("DELETE FROM `TopicAsTable` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
||||||
|
@ -4,20 +4,24 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
public class MySqlInsertTest {
|
{
|
||||||
|
public class MySqlInsertTest
|
||||||
|
{
|
||||||
|
|
||||||
IInsert<Topic> insert => g.mysql.Insert<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IInsert<Topic> insert => g.mysql.Insert<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestEnumInsertTb {
|
class TestEnumInsertTb
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public TestEnumInserTbType type { get; set; }
|
public TestEnumInserTbType type { get; set; }
|
||||||
@ -26,7 +30,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
enum TestEnumInserTbType { str1, biggit, sum211 }
|
enum TestEnumInserTbType { str1, biggit, sum211 }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AppendData() {
|
public void AppendData()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
@ -50,18 +55,20 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InsertColumns() {
|
public void InsertColumns()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql();
|
var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql();
|
||||||
Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(@Title_0), (@Title_1), (@Title_2), (@Title_3), (@Title_4), (@Title_5), (@Title_6), (@Title_7), (@Title_8), (@Title_9)", sql);
|
Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(@Title_0), (@Title_1), (@Title_2), (@Title_3), (@Title_4), (@Title_5), (@Title_6), (@Title_7), (@Title_8), (@Title_9)", sql);
|
||||||
|
|
||||||
sql = insert.AppendData(items).InsertColumns(a =>new { a.Title, a.Clicks }).ToSql();
|
sql = insert.AppendData(items).InsertColumns(a => new { a.Title, a.Clicks }).ToSql();
|
||||||
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql);
|
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IgnoreColumns() {
|
public void IgnoreColumns()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
@ -72,7 +79,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(@Clicks_0), (@Clicks_1), (@Clicks_2), (@Clicks_3), (@Clicks_4), (@Clicks_5), (@Clicks_6), (@Clicks_7), (@Clicks_8), (@Clicks_9)", sql);
|
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(@Clicks_0), (@Clicks_1), (@Clicks_2), (@Clicks_3), (@Clicks_4), (@Clicks_5), (@Clicks_6), (@Clicks_7), (@Clicks_8), (@Clicks_9)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -83,19 +91,21 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal(1, g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteAffrows());
|
Assert.Equal(1, g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteAffrows());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteIdentity() {
|
public void ExecuteIdentity()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
Assert.NotEqual(0, insert.AppendData(items.First()).ExecuteIdentity());
|
Assert.NotEqual(0, insert.AppendData(items.First()).ExecuteIdentity());
|
||||||
|
|
||||||
var id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteIdentity();
|
var id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteIdentity();
|
||||||
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select< TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
||||||
id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteIdentity();
|
id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteIdentity();
|
||||||
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteInserted() {
|
public void ExecuteInserted()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
@ -103,7 +113,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
|
@ -5,14 +5,17 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
|
{
|
||||||
|
|
||||||
public class MySqlSelectTest {
|
public class MySqlSelectTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
public class Topic {
|
public class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -24,12 +27,14 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
public virtual TopicFields Fields { get; set; }
|
public virtual TopicFields Fields { get; set; }
|
||||||
}
|
}
|
||||||
public class TopicFields {
|
public class TopicFields
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public int TopicId { get; set; }
|
public int TopicId { get; set; }
|
||||||
public virtual Topic Topic { get; set; }
|
public virtual Topic Topic { get; set; }
|
||||||
}
|
}
|
||||||
public class TestTypeInfo {
|
public class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
|
|
||||||
@ -40,7 +45,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
public virtual ICollection<Topic> Topics { get; set; }
|
public virtual ICollection<Topic> Topics { get; set; }
|
||||||
}
|
}
|
||||||
public class TestTypeParentInfo {
|
public class TestTypeParentInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
@ -48,7 +54,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class Song {
|
public partial class Song
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public DateTime? Create_time { get; set; }
|
public DateTime? Create_time { get; set; }
|
||||||
@ -58,14 +65,16 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
public virtual ICollection<Tag> Tags { get; set; }
|
public virtual ICollection<Tag> Tags { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Song_tag {
|
public partial class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
public virtual Song Song { get; set; }
|
public virtual Song Song { get; set; }
|
||||||
|
|
||||||
public int Tag_id { get; set; }
|
public int Tag_id { get; set; }
|
||||||
public virtual Tag Tag { get; set; }
|
public virtual Tag Tag { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Tag {
|
public partial class Tag
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Parent_id { get; set; }
|
public int? Parent_id { get; set; }
|
||||||
@ -79,7 +88,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "TestInfoT1", SelectFilter = " a.id > 0")]
|
[Table(Name = "TestInfoT1", SelectFilter = " a.id > 0")]
|
||||||
class TestInfo {
|
class TestInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int TypeGuid { get; set; }
|
public int TypeGuid { get; set; }
|
||||||
@ -89,7 +99,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsSelect() {
|
public void AsSelect()
|
||||||
|
{
|
||||||
//OneToOne、ManyToOne
|
//OneToOne、ManyToOne
|
||||||
var t0 = g.mysql.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤语").ToSql();
|
var t0 = g.mysql.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤语").ToSql();
|
||||||
//SELECT a.`Id`, a.`Parent_id`, a__Parent.`Id` as3, a__Parent.`Parent_id` as4, a__Parent.`Ddd`, a__Parent.`Name`, a.`Ddd` as7, a.`Name` as8
|
//SELECT a.`Id`, a.`Parent_id`, a__Parent.`Id` as3, a__Parent.`Parent_id` as4, a__Parent.`Ddd`, a__Parent.`Name`, a.`Ddd` as7, a.`Name` as8
|
||||||
@ -122,7 +133,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Lazy() {
|
public void Lazy()
|
||||||
|
{
|
||||||
var tags = g.mysql.Select<Tag>().Where(a => a.Parent.Name == "xxx")
|
var tags = g.mysql.Select<Tag>().Where(a => a.Parent.Name == "xxx")
|
||||||
.LeftJoin(a => a.Parent_id == a.Parent.Id)
|
.LeftJoin(a => a.Parent_id == a.Parent.Id)
|
||||||
.ToSql();
|
.ToSql();
|
||||||
@ -131,7 +143,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDataTable() {
|
public void ToDataTable()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -146,13 +159,15 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
|
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestDto {
|
class TestDto
|
||||||
|
{
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string name { get; set; } //这是join表的属性
|
public string name { get; set; } //这是join表的属性
|
||||||
public int ParentId { get; set; } //这是join表的属性
|
public int ParentId { get; set; } //这是join表的属性
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToList() {
|
public void ToList()
|
||||||
|
{
|
||||||
|
|
||||||
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
||||||
var testDto2 = select.Limit(10).ToList(a => new TestDto());
|
var testDto2 = select.Limit(10).ToList(a => new TestDto());
|
||||||
@ -200,19 +215,23 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
.LeftJoin(a => c.Id == b.ParentId)
|
.LeftJoin(a => c.Id == b.ParentId)
|
||||||
.Where(a => b.Name != "xxx"));
|
.Where(a => b.Name != "xxx"));
|
||||||
var list111sql = list111.ToSql();
|
var list111sql = list111.ToSql();
|
||||||
var list111data = list111.ToList((a, b, c) => new {
|
var list111data = list111.ToList((a, b, c) => new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
title_substring = a.Title.Substring(0, 1),
|
title_substring = a.Title.Substring(0, 1),
|
||||||
a.Type,
|
a.Type,
|
||||||
ccc = new { a.Id, a.Title },
|
ccc = new { a.Id, a.Title },
|
||||||
tp = a.Type,
|
tp = a.Type,
|
||||||
tp2 = new {
|
tp2 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp2 = a.Type.Name
|
tp2 = a.Type.Name
|
||||||
},
|
},
|
||||||
tp3 = new {
|
tp3 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp33 = new {
|
tp33 = new
|
||||||
|
{
|
||||||
a.Id
|
a.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,19 +239,23 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
var ttt122 = g.mysql.Select<TestTypeParentInfo>().Where(a => a.Id > 0).ToSql();
|
var ttt122 = g.mysql.Select<TestTypeParentInfo>().Where(a => a.Id > 0).ToSql();
|
||||||
var sql5 = g.mysql.Select<TestInfo>().From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s).Where((a, b, c) => a.Id == b.ParentId).ToSql();
|
var sql5 = g.mysql.Select<TestInfo>().From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s).Where((a, b, c) => a.Id == b.ParentId).ToSql();
|
||||||
var t11112 = g.mysql.Select<TestInfo>().ToList(a => new {
|
var t11112 = g.mysql.Select<TestInfo>().ToList(a => new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
a.Title,
|
a.Title,
|
||||||
a.Type,
|
a.Type,
|
||||||
ccc = new { a.Id, a.Title },
|
ccc = new { a.Id, a.Title },
|
||||||
tp = a.Type,
|
tp = a.Type,
|
||||||
tp2 = new {
|
tp2 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp2 = a.Type.Name
|
tp2 = a.Type.Name
|
||||||
},
|
},
|
||||||
tp3 = new {
|
tp3 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp33 = new {
|
tp33 = new
|
||||||
|
{
|
||||||
a.Id
|
a.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -254,17 +277,20 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
var t11 = select.Where(a => a.Type.Name.Length > 0).ToList(true);
|
var t11 = select.Where(a => a.Type.Name.Length > 0).ToList(true);
|
||||||
var t21 = select.Where(a => a.Type.Parent.Name.Length > 0).ToList(true);
|
var t21 = select.Where(a => a.Type.Parent.Name.Length > 0).ToList(true);
|
||||||
}
|
}
|
||||||
class TestGuidIdToList {
|
class TestGuidIdToList
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public string title { get; set; } = Guid.NewGuid().ToString();
|
public string title { get; set; } = Guid.NewGuid().ToString();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToOne() {
|
public void ToOne()
|
||||||
|
{
|
||||||
var testnotfind = select.Where("1=2").First(a => a.CreateTime);
|
var testnotfind = select.Where("1=2").First(a => a.CreateTime);
|
||||||
Assert.Equal(default(DateTime), testnotfind);
|
Assert.Equal(default(DateTime), testnotfind);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSql() {
|
public void ToSql()
|
||||||
|
{
|
||||||
g.mysql.Insert<testenumWhere>().AppendData(new testenumWhere { type = testenumWhereType.Blaaa }).ExecuteAffrows();
|
g.mysql.Insert<testenumWhere>().AppendData(new testenumWhere { type = testenumWhereType.Blaaa }).ExecuteAffrows();
|
||||||
|
|
||||||
var sql1 = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToSql();
|
var sql1 = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToSql();
|
||||||
@ -273,14 +299,16 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
var sql3 = g.mysql.Select<testenumWhere>().Where(a => a.type.Equals(testenumWhereType.Blaaa)).ToSql();
|
var sql3 = g.mysql.Select<testenumWhere>().Where(a => a.type.Equals(testenumWhereType.Blaaa)).ToSql();
|
||||||
var tolist = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToList();
|
var tolist = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToList();
|
||||||
}
|
}
|
||||||
class testenumWhere {
|
class testenumWhere
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public testenumWhereType type { get; set; }
|
public testenumWhereType type { get; set; }
|
||||||
}
|
}
|
||||||
public enum testenumWhereType { Menu, Class, Blaaa }
|
public enum testenumWhereType { Menu, Class, Blaaa }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Any() {
|
public void Any()
|
||||||
|
{
|
||||||
var count = select.Where(a => 1 == 1).Count();
|
var count = select.Where(a => 1 == 1).Count();
|
||||||
Assert.False(select.Where(a => 1 == 2).Any());
|
Assert.False(select.Where(a => 1 == 2).Any());
|
||||||
Assert.Equal(count > 0, select.Where(a => 1 == 1).Any());
|
Assert.Equal(count > 0, select.Where(a => 1 == 1).Any());
|
||||||
@ -302,18 +330,21 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
collectionSelect.ToList();
|
collectionSelect.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Count() {
|
public void Count()
|
||||||
|
{
|
||||||
var count = select.Where(a => 1 == 1).Count();
|
var count = select.Where(a => 1 == 1).Count();
|
||||||
select.Where(a => 1 == 1).Count(out var count2);
|
select.Where(a => 1 == 1).Count(out var count2);
|
||||||
Assert.Equal(count, count2);
|
Assert.Equal(count, count2);
|
||||||
Assert.Equal(0, select.Where(a => 1 == 2).Count());
|
Assert.Equal(0, select.Where(a => 1 == 2).Count());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Master() {
|
public void Master()
|
||||||
|
{
|
||||||
Assert.StartsWith(" SELECT", select.Master().Where(a => 1 == 1).ToSql());
|
Assert.StartsWith(" SELECT", select.Master().Where(a => 1 == 1).ToSql());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void From() {
|
public void From()
|
||||||
|
{
|
||||||
var query2 = select.From<TestTypeInfo>((s, b) => s
|
var query2 = select.From<TestTypeInfo>((s, b) => s
|
||||||
.LeftJoin(a => a.TypeGuid == b.Guid)
|
.LeftJoin(a => a.TypeGuid == b.Guid)
|
||||||
);
|
);
|
||||||
@ -330,7 +361,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
query3.ToList();
|
query3.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LeftJoin() {
|
public void LeftJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -398,7 +430,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InnerJoin() {
|
public void InnerJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -467,7 +500,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void RightJoin() {
|
public void RightJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -536,7 +570,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
|
|
||||||
var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
|
var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
|
||||||
var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
|
var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
|
||||||
@ -606,7 +641,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereIf() {
|
public void WhereIf()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.WhereIf(true, a => a.Id == 10);
|
var query = select.WhereIf(true, a => a.Id == 10);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -700,7 +736,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
var sql2222 = select.Where(a => select.Where(b => b.Id == a.Id).Any()).ToList();
|
var sql2222 = select.Where(a => select.Where(b => b.Id == a.Id).Any()).ToList();
|
||||||
|
|
||||||
sql2222 = select.Where(a =>
|
sql2222 = select.Where(a =>
|
||||||
@ -713,7 +750,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
).ToList();
|
).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GroupBy() {
|
public void GroupBy()
|
||||||
|
{
|
||||||
var groupby = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
|
var groupby = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
|
||||||
.Where(a => a.Id == 1)
|
.Where(a => a.Id == 1)
|
||||||
)
|
)
|
||||||
@ -724,7 +762,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
.OrderByDescending(a => a.Count())
|
.OrderByDescending(a => a.Count())
|
||||||
.Offset(10)
|
.Offset(10)
|
||||||
.Limit(2)
|
.Limit(2)
|
||||||
.ToList(a => new {
|
.ToList(a => new
|
||||||
|
{
|
||||||
a.Key.tt2,
|
a.Key.tt2,
|
||||||
cou1 = a.Count(),
|
cou1 = a.Count(),
|
||||||
arg1 = a.Avg(a.Key.mod4),
|
arg1 = a.Avg(a.Key.mod4),
|
||||||
@ -738,7 +777,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
var aggsql1 = select
|
var aggsql1 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -746,7 +786,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
});
|
});
|
||||||
var aggtolist1 = select
|
var aggtolist1 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToList(b => new {
|
.ToList(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -755,7 +796,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
var aggsql2 = select
|
var aggsql2 = select
|
||||||
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key.Title,
|
b.Key.Title,
|
||||||
b.Key.yyyy,
|
b.Key.yyyy,
|
||||||
|
|
||||||
@ -765,7 +807,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
});
|
});
|
||||||
var aggtolist2 = select
|
var aggtolist2 = select
|
||||||
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
||||||
.ToList(b => new {
|
.ToList(b => new
|
||||||
|
{
|
||||||
b.Key.Title,
|
b.Key.Title,
|
||||||
b.Key.yyyy,
|
b.Key.yyyy,
|
||||||
|
|
||||||
@ -776,7 +819,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
var aggsql3 = select
|
var aggsql3 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -785,24 +829,29 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToAggregate() {
|
public void ToAggregate()
|
||||||
|
{
|
||||||
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
|
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void OrderBy() {
|
public void OrderBy()
|
||||||
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset() {
|
public void Skip_Offset()
|
||||||
|
{
|
||||||
var sql = select.Offset(10).Limit(10).ToList();
|
var sql = select.Offset(10).Limit(10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Take_Limit() {
|
public void Take_Limit()
|
||||||
|
{
|
||||||
var sql = select.Limit(10).ToList();
|
var sql = select.Limit(10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Page() {
|
public void Page()
|
||||||
|
{
|
||||||
var sql1 = select.Page(1, 10).ToList();
|
var sql1 = select.Page(1, 10).ToList();
|
||||||
var sql2 = select.Page(2, 10).ToList();
|
var sql2 = select.Page(2, 10).ToList();
|
||||||
var sql3 = select.Page(3, 10).ToList();
|
var sql3 = select.Page(3, 10).ToList();
|
||||||
@ -812,33 +861,41 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
var sql33 = select.OrderBy(a => new Random().NextDouble()).Page(3, 10).ToList();
|
var sql33 = select.OrderBy(a => new Random().NextDouble()).Page(3, 10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Distinct() {
|
public void Distinct()
|
||||||
|
{
|
||||||
var t1 = select.Distinct().ToList(a => a.Title);
|
var t1 = select.Distinct().ToList(a => a.Title);
|
||||||
var t2 = select.Distinct().Limit(10).ToList(a => a.Title);
|
var t2 = select.Distinct().Limit(10).ToList(a => a.Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sum() {
|
public void Sum()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Min() {
|
public void Min()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Max() {
|
public void Max()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Avg() {
|
public void Avg()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void As() {
|
public void As()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
|
|
||||||
var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList();
|
var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList();
|
||||||
|
|
||||||
Func<Type, string, string> tableRule = (type, oldname) => {
|
Func<Type, string, string> tableRule = (type, oldname) =>
|
||||||
|
{
|
||||||
if (type == typeof(Topic)) return oldname + "AsTable1";
|
if (type == typeof(Topic)) return oldname + "AsTable1";
|
||||||
else if (type == typeof(TestTypeInfo)) return oldname + "AsTable2";
|
else if (type == typeof(TestTypeInfo)) return oldname + "AsTable2";
|
||||||
return oldname + "AsTable";
|
return oldname + "AsTable";
|
||||||
@ -900,14 +957,16 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topicAsTable1` a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = @bname", sql);
|
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topicAsTable1` a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = @bname", sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestInclude_OneToManyModel1 {
|
public class TestInclude_OneToManyModel1
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public virtual TestInclude_OneToManyModel2 model2 { get; set; }
|
public virtual TestInclude_OneToManyModel2 model2 { get; set; }
|
||||||
|
|
||||||
public string m1name { get; set; }
|
public string m1name { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel2 {
|
public class TestInclude_OneToManyModel2
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public int model2id { get; set; }
|
public int model2id { get; set; }
|
||||||
public virtual TestInclude_OneToManyModel1 model1 { get; set; }
|
public virtual TestInclude_OneToManyModel1 model1 { get; set; }
|
||||||
@ -916,7 +975,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
public List<TestInclude_OneToManyModel3> childs { get; set; }
|
public List<TestInclude_OneToManyModel3> childs { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel3 {
|
public class TestInclude_OneToManyModel3
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
@ -925,7 +985,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
public List<TestInclude_OneToManyModel4> childs2 { get; set; }
|
public List<TestInclude_OneToManyModel4> childs2 { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel4 {
|
public class TestInclude_OneToManyModel4
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
@ -934,7 +995,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToMany() {
|
public void Include_OneToMany()
|
||||||
|
{
|
||||||
var model1 = new TestInclude_OneToManyModel1 { m1name = DateTime.Now.Second.ToString() };
|
var model1 = new TestInclude_OneToManyModel1 { m1name = DateTime.Now.Second.ToString() };
|
||||||
model1.id = (int)g.mysql.Insert(model1).ExecuteIdentity();
|
model1.id = (int)g.mysql.Insert(model1).ExecuteIdentity();
|
||||||
var model2 = new TestInclude_OneToManyModel2 { model2id = model1.id, m2setting = DateTime.Now.Second.ToString() };
|
var model2 = new TestInclude_OneToManyModel2 { model2id = model1.id, m2setting = DateTime.Now.Second.ToString() };
|
||||||
@ -989,7 +1051,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestInclude_OneToManyModel11 {
|
public class TestInclude_OneToManyModel11
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int model2id { get; set; }
|
public int model2id { get; set; }
|
||||||
@ -998,13 +1061,15 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
public string m1name { get; set; }
|
public string m1name { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestInclude_OneToManyModel22 {
|
public class TestInclude_OneToManyModel22
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string m2setting { get; set; }
|
public string m2setting { get; set; }
|
||||||
public List<TestInclude_OneToManyModel33> childs { get; set; }
|
public List<TestInclude_OneToManyModel33> childs { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel33 {
|
public class TestInclude_OneToManyModel33
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int model2Id { get; set; }
|
public int model2Id { get; set; }
|
||||||
@ -1012,7 +1077,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
public string setting { get; set; }
|
public string setting { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToMany2() {
|
public void Include_OneToMany2()
|
||||||
|
{
|
||||||
string setting = "x";
|
string setting = "x";
|
||||||
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
|
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
|
||||||
model2.id = (int)g.mysql.Insert(model2).ExecuteIdentity();
|
model2.id = (int)g.mysql.Insert(model2).ExecuteIdentity();
|
||||||
@ -1042,37 +1108,44 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToChilds() {
|
public void Include_OneToChilds()
|
||||||
var tag1 = new Tag {
|
{
|
||||||
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_中国"
|
Name = "test_oneToChilds_01_中国"
|
||||||
};
|
};
|
||||||
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
||||||
var tag1_1 = new Tag {
|
var tag1_1 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag1.Id,
|
Parent_id = tag1.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_北京"
|
Name = "test_oneToChilds_01_北京"
|
||||||
};
|
};
|
||||||
tag1_1.Id = (int)g.mysql.Insert(tag1_1).ExecuteIdentity();
|
tag1_1.Id = (int)g.mysql.Insert(tag1_1).ExecuteIdentity();
|
||||||
var tag1_2 = new Tag {
|
var tag1_2 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag1.Id,
|
Parent_id = tag1.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_上海"
|
Name = "test_oneToChilds_01_上海"
|
||||||
};
|
};
|
||||||
tag1_2.Id = (int)g.mysql.Insert(tag1_2).ExecuteIdentity();
|
tag1_2.Id = (int)g.mysql.Insert(tag1_2).ExecuteIdentity();
|
||||||
|
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_美国"
|
Name = "test_oneToChilds_02_美国"
|
||||||
};
|
};
|
||||||
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
||||||
var tag2_1 = new Tag {
|
var tag2_1 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag2.Id,
|
Parent_id = tag2.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_纽约"
|
Name = "test_oneToChilds_02_纽约"
|
||||||
};
|
};
|
||||||
tag2_1.Id = (int)g.mysql.Insert(tag2_1).ExecuteIdentity();
|
tag2_1.Id = (int)g.mysql.Insert(tag2_1).ExecuteIdentity();
|
||||||
var tag2_2 = new Tag {
|
var tag2_2 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag2.Id,
|
Parent_id = tag2.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_华盛顿"
|
Name = "test_oneToChilds_02_华盛顿"
|
||||||
@ -1132,37 +1205,44 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_ManyToMany() {
|
public void Include_ManyToMany()
|
||||||
|
{
|
||||||
|
|
||||||
var tag1 = new Tag {
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_01_中国"
|
Name = "test_manytoMany_01_中国"
|
||||||
};
|
};
|
||||||
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_02_美国"
|
Name = "test_manytoMany_02_美国"
|
||||||
};
|
};
|
||||||
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
||||||
var tag3 = new Tag {
|
var tag3 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_03_日本"
|
Name = "test_manytoMany_03_日本"
|
||||||
};
|
};
|
||||||
tag3.Id = (int)g.mysql.Insert(tag3).ExecuteIdentity();
|
tag3.Id = (int)g.mysql.Insert(tag3).ExecuteIdentity();
|
||||||
|
|
||||||
var song1 = new Song {
|
var song1 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_01_我是中国人.mp3",
|
Title = "test_manytoMany_01_我是中国人.mp3",
|
||||||
Url = "http://ww.baidu.com/"
|
Url = "http://ww.baidu.com/"
|
||||||
};
|
};
|
||||||
song1.Id = (int)g.mysql.Insert(song1).ExecuteIdentity();
|
song1.Id = (int)g.mysql.Insert(song1).ExecuteIdentity();
|
||||||
var song2 = new Song {
|
var song2 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_02_爱你一万年.mp3",
|
Title = "test_manytoMany_02_爱你一万年.mp3",
|
||||||
Url = "http://ww.163.com/"
|
Url = "http://ww.163.com/"
|
||||||
};
|
};
|
||||||
song2.Id = (int)g.mysql.Insert(song2).ExecuteIdentity();
|
song2.Id = (int)g.mysql.Insert(song2).ExecuteIdentity();
|
||||||
var song3 = new Song {
|
var song3 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_03_千年等一回.mp3",
|
Title = "test_manytoMany_03_千年等一回.mp3",
|
||||||
Url = "http://ww.sina.com/"
|
Url = "http://ww.sina.com/"
|
||||||
|
@ -3,19 +3,23 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
public class MySqlUpdateTest {
|
{
|
||||||
|
public class MySqlUpdateTest
|
||||||
|
{
|
||||||
IUpdate<Topic> update => g.mysql.Update<Topic>();
|
IUpdate<Topic> update => g.mysql.Update<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Clicks { get; set; }
|
public int? Clicks { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestEnumUpdateTb {
|
class TestEnumUpdateTb
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public TestEnumUpdateTbType type { get; set; }
|
public TestEnumUpdateTbType type { get; set; }
|
||||||
@ -24,7 +28,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
enum TestEnumUpdateTbType { str1, biggit, sum211 }
|
enum TestEnumUpdateTbType { str1, biggit, sum211 }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Dywhere() {
|
public void Dywhere()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topic` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
|
Assert.Equal("UPDATE `tb_topic` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topic` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
|
Assert.Equal("UPDATE `tb_topic` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
|
||||||
@ -33,7 +38,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SetSource() {
|
public void SetSource()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Clicks` = @p_0, `Title` = @p_1, `CreateTime` = @p_2 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Clicks` = @p_0, `Title` = @p_1, `CreateTime` = @p_2 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -46,7 +52,7 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
|
|
||||||
sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020,1,1)).ToSql().Replace("\r\n", "");
|
sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `CreateTime` = @p_0 WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `CreateTime` = @p_0 WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
|
|
||||||
sql = g.mysql.Insert<TestEnumUpdateTb>().AppendData(new TestEnumUpdateTb { type = TestEnumUpdateTbType.sum211 }).ToSql().Replace("\r\n", "");
|
sql = g.mysql.Insert<TestEnumUpdateTb>().AppendData(new TestEnumUpdateTb { type = TestEnumUpdateTbType.sum211 }).ToSql().Replace("\r\n", "");
|
||||||
@ -72,7 +78,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IgnoreColumns() {
|
public void IgnoreColumns()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = @p_0 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = @p_0 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -83,7 +90,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UpdateColumns() {
|
public void UpdateColumns()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).UpdateColumns(a => a.Title).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).UpdateColumns(a => a.Title).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = @p_0 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = @p_0 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -94,7 +102,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Set() {
|
public void Set()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = @p_0 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = @p_0 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -133,7 +142,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal(TestEnumUpdateTbType.str1, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumUpdateTbType.str1, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SetRaw() {
|
public void SetRaw()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + @incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + @incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET clicks = clicks + @incrClick WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET clicks = clicks + @incrClick WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -141,7 +151,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET title='newtitle' WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET title='newtitle' WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -162,20 +173,24 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0 AND `type` = 'str1')", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0 AND `type` = 'str1')", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteUpdated() {
|
public void ExecuteUpdated()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").AsTable(a => "tb_topicAsTable").ToSql());
|
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").AsTable(a => "tb_topicAsTable").ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").AsTable(a => "tb_topicAsTable").ToSql());
|
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").AsTable(a => "tb_topicAsTable").ToSql());
|
||||||
|
@ -2,9 +2,12 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorMapType {
|
namespace FreeSql.Tests.MySqlConnectorMapType
|
||||||
public class BoolNullableTest {
|
{
|
||||||
class BoolNullableMap {
|
public class BoolNullableTest
|
||||||
|
{
|
||||||
|
class BoolNullableMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(MapType = typeof(bool))]
|
[Column(MapType = typeof(bool))]
|
||||||
public bool? tobool { get; set; } = true;
|
public bool? tobool { get; set; } = true;
|
||||||
@ -57,7 +60,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
public bool? tostring { get; set; } = true;
|
public bool? tostring { get; set; } = true;
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Bool() {
|
public void Bool()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -138,7 +142,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -219,7 +224,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByteNullable() {
|
public void SByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -300,7 +306,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -381,7 +388,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ShortNullable() {
|
public void ShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -462,7 +470,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -543,7 +552,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IntNullable() {
|
public void IntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -624,7 +634,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -705,7 +716,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LongNullable() {
|
public void LongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -787,7 +799,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -868,7 +881,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteNullable() {
|
public void ByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -949,7 +963,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1030,7 +1045,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShortNullable() {
|
public void UShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1111,7 +1127,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1192,7 +1209,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UIntNullable() {
|
public void UIntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1273,7 +1291,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1354,7 +1373,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULongNullable() {
|
public void ULongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1436,23 +1456,29 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan() {
|
public void TimeSpan()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime() {
|
public void DateTime()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteArray() {
|
public void ByteArray()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void String() {
|
public void String()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1534,29 +1560,37 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid() {
|
public void Guid()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPoint() {
|
public void MygisPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisLineString() {
|
public void MygisLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPolygon() {
|
public void MygisPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPoint() {
|
public void MygisMultiPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiLineString() {
|
public void MygisMultiLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPolygon() {
|
public void MygisMultiPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,13 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorMapType {
|
namespace FreeSql.Tests.MySqlConnectorMapType
|
||||||
public class BoolTest {
|
{
|
||||||
|
public class BoolTest
|
||||||
|
{
|
||||||
|
|
||||||
class BoolMap {
|
class BoolMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(MapType = typeof(bool?))]
|
[Column(MapType = typeof(bool?))]
|
||||||
public bool toboolnullable { get; set; } = true;
|
public bool toboolnullable { get; set; } = true;
|
||||||
@ -59,7 +62,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BoolNullable() {
|
public void BoolNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -114,7 +118,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -169,7 +174,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByteNullable() {
|
public void SByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -224,7 +230,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -279,7 +286,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ShortNullable() {
|
public void ShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -334,7 +342,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -389,7 +398,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IntNullable() {
|
public void IntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -444,7 +454,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -499,7 +510,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LongNullable() {
|
public void LongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -555,7 +567,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -610,7 +623,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteNullable() {
|
public void ByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -665,7 +679,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -720,7 +735,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShortNullable() {
|
public void UShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -775,7 +791,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -830,7 +847,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UIntNullable() {
|
public void UIntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -885,7 +903,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -940,7 +959,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULongNullable() {
|
public void ULongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -996,23 +1016,29 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan() {
|
public void TimeSpan()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime() {
|
public void DateTime()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteArray() {
|
public void ByteArray()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void String() {
|
public void String()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -1068,29 +1094,37 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid() {
|
public void Guid()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPoint() {
|
public void MygisPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisLineString() {
|
public void MygisLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPolygon() {
|
public void MygisPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPoint() {
|
public void MygisMultiPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiLineString() {
|
public void MygisMultiLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPolygon() {
|
public void MygisMultiPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,12 @@ using System;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorMapType {
|
namespace FreeSql.Tests.MySqlConnectorMapType
|
||||||
public class EnumTest {
|
{
|
||||||
class EnumTestMap {
|
public class EnumTest
|
||||||
|
{
|
||||||
|
class EnumTestMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(MapType = typeof(string))]
|
[Column(MapType = typeof(string))]
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumToString() {
|
public void EnumToString()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -76,7 +80,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullableToString() {
|
public void EnumNullableToString()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -136,7 +141,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumToInt() {
|
public void EnumToInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -192,7 +198,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullableToInt() {
|
public void EnumNullableToInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
|
@ -3,9 +3,12 @@ using System;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorMapType {
|
namespace FreeSql.Tests.MySqlConnectorMapType
|
||||||
public class ToStringTest {
|
{
|
||||||
class ToStringMap {
|
public class ToStringTest
|
||||||
|
{
|
||||||
|
class ToStringMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(MapType = typeof(string))]
|
[Column(MapType = typeof(string))]
|
||||||
@ -35,7 +38,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Enum1() {
|
public void Enum1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -91,7 +95,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullable() {
|
public void EnumNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -150,7 +155,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BigInteger1() {
|
public void BigInteger1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -206,7 +212,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BigIntegerNullable() {
|
public void BigIntegerNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -265,7 +272,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan1() {
|
public void TimeSpan1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -305,7 +313,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -359,7 +368,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime1() {
|
public void DateTime1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -399,7 +409,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -454,7 +465,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid1() {
|
public void Guid1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -497,7 +509,8 @@ namespace FreeSql.Tests.MySqlConnectorMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
|
@ -6,15 +6,19 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
public class MySqlCodeFirstTest {
|
{
|
||||||
|
public class MySqlCodeFirstTest
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void 中文表_字段() {
|
public void 中文表_字段()
|
||||||
|
{
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<测试中文表2>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<测试中文表2>();
|
||||||
g.mysql.CodeFirst.SyncStructure<测试中文表2>();
|
g.mysql.CodeFirst.SyncStructure<测试中文表2>();
|
||||||
|
|
||||||
var item = new 测试中文表2 {
|
var item = new 测试中文表2
|
||||||
|
{
|
||||||
标题 = "测试标题",
|
标题 = "测试标题",
|
||||||
创建时间 = DateTime.Now
|
创建时间 = DateTime.Now
|
||||||
};
|
};
|
||||||
@ -25,7 +29,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
Assert.Equal(item.编号, item2.编号);
|
Assert.Equal(item.编号, item2.编号);
|
||||||
Assert.Equal(item.标题, item2.标题);
|
Assert.Equal(item.标题, item2.标题);
|
||||||
}
|
}
|
||||||
class 测试中文表2 {
|
class 测试中文表2
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public Guid 编号 { get; set; }
|
public Guid 编号 { get; set; }
|
||||||
|
|
||||||
@ -35,12 +40,14 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddUniques() {
|
public void AddUniques()
|
||||||
|
{
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
|
||||||
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
|
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
|
||||||
}
|
}
|
||||||
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
|
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
|
||||||
class AddUniquesInfo {
|
class AddUniquesInfo
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(Unique = "uk_phone")]
|
[Column(Unique = "uk_phone")]
|
||||||
public string phone { get; set; }
|
public string phone { get; set; }
|
||||||
@ -54,14 +61,16 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddField() {
|
public void AddField()
|
||||||
|
{
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
|
||||||
|
|
||||||
var id = g.mysql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
|
var id = g.mysql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "TopicAddField", OldName = "xxxtb.TopicAddField")]
|
[Table(Name = "TopicAddField", OldName = "xxxtb.TopicAddField")]
|
||||||
public class TopicAddField {
|
public class TopicAddField
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int? Id { get; set; }
|
public int? Id { get; set; }
|
||||||
|
|
||||||
@ -75,10 +84,12 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetComparisonDDLStatements() {
|
public void GetComparisonDDLStatements()
|
||||||
|
{
|
||||||
|
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
|
||||||
if (string.IsNullOrEmpty(sql) == false) {
|
if (string.IsNullOrEmpty(sql) == false)
|
||||||
|
{
|
||||||
Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` (
|
Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` (
|
||||||
`Id` INT(11) NOT NULL AUTO_INCREMENT,
|
`Id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
`testFieldBool` BIT(1) NOT NULL,
|
`testFieldBool` BIT(1) NOT NULL,
|
||||||
@ -135,13 +146,15 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CurdAllField() {
|
public void CurdAllField()
|
||||||
|
{
|
||||||
var item = new TableAllType { };
|
var item = new TableAllType { };
|
||||||
item.Id = (int)insert.AppendData(item).ExecuteIdentity();
|
item.Id = (int)insert.AppendData(item).ExecuteIdentity();
|
||||||
|
|
||||||
var newitem = select.Where(a => a.Id == item.Id).ToOne();
|
var newitem = select.Where(a => a.Id == item.Id).ToOne();
|
||||||
|
|
||||||
var item2 = new TableAllType {
|
var item2 = new TableAllType
|
||||||
|
{
|
||||||
testFieldBool = true,
|
testFieldBool = true,
|
||||||
testFieldBoolNullable = true,
|
testFieldBoolNullable = true,
|
||||||
testFieldByte = 255,
|
testFieldByte = 255,
|
||||||
@ -209,7 +222,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
|
|
||||||
[JsonObject(MemberSerialization.OptIn), Table(Name = "tb_alltype")]
|
[JsonObject(MemberSerialization.OptIn), Table(Name = "tb_alltype")]
|
||||||
public partial class Tb_alltype {
|
public partial class Tb_alltype
|
||||||
|
{
|
||||||
|
|
||||||
[JsonProperty, Column(Name = "Id", DbType = "int(11)", IsPrimary = true, IsIdentity = true)]
|
[JsonProperty, Column(Name = "Id", DbType = "int(11)", IsPrimary = true, IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
@ -385,7 +399,8 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
internal static IFreeSql mysql => null;
|
internal static IFreeSql mysql => null;
|
||||||
public static FreeSql.ISelect<Tb_alltype> Select => mysql.Select<Tb_alltype>();
|
public static FreeSql.ISelect<Tb_alltype> Select => mysql.Select<Tb_alltype>();
|
||||||
|
|
||||||
public static long Delete(int Id) {
|
public static long Delete(int Id)
|
||||||
|
{
|
||||||
var affrows = mysql.Delete<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
var affrows = mysql.Delete<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
@ -393,8 +408,10 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
|
/// 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Save() {
|
public void Save()
|
||||||
if (this.Id != default(int)) {
|
{
|
||||||
|
if (this.Id != default(int))
|
||||||
|
{
|
||||||
var affrows = mysql.Update<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
var affrows = mysql.Update<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
||||||
if (affrows > 0) return;
|
if (affrows > 0) return;
|
||||||
}
|
}
|
||||||
@ -403,24 +420,29 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Tb_alltypeTESTFIELDENUM1 {
|
public enum Tb_alltypeTESTFIELDENUM1
|
||||||
|
{
|
||||||
E1 = 1, E2, E3, E5
|
E1 = 1, E2, E3, E5
|
||||||
}
|
}
|
||||||
public enum Tb_alltypeTESTFIELDENUM1NULLABLE {
|
public enum Tb_alltypeTESTFIELDENUM1NULLABLE
|
||||||
|
{
|
||||||
E1 = 1, E2, E3, E5
|
E1 = 1, E2, E3, E5
|
||||||
}
|
}
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum Tb_alltypeTESTFIELDENUM2 : long {
|
public enum Tb_alltypeTESTFIELDENUM2 : long
|
||||||
|
{
|
||||||
F1 = 1, F2 = 2, F3 = 4
|
F1 = 1, F2 = 2, F3 = 4
|
||||||
}
|
}
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum Tb_alltypeTESTFIELDENUM2NULLABLE : long {
|
public enum Tb_alltypeTESTFIELDENUM2NULLABLE : long
|
||||||
|
{
|
||||||
F1 = 1, F2 = 2, F3 = 4
|
F1 = 1, F2 = 2, F3 = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
class TableAllType {
|
class TableAllType
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
@ -2,37 +2,46 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
public class MySqlAdoTest {
|
{
|
||||||
|
public class MySqlAdoTest
|
||||||
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Pool() {
|
public void Pool()
|
||||||
|
{
|
||||||
var t1 = g.mysql.Ado.MasterPool.StatisticsFullily;
|
var t1 = g.mysql.Ado.MasterPool.StatisticsFullily;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SlavePools() {
|
public void SlavePools()
|
||||||
|
{
|
||||||
var t2 = g.mysql.Ado.SlavePools.Count;
|
var t2 = g.mysql.Ado.SlavePools.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteReader() {
|
public void ExecuteReader()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteArray() {
|
public void ExecuteArray()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteNonQuery() {
|
public void ExecuteNonQuery()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteScalar() {
|
public void ExecuteScalar()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Query() {
|
public void Query()
|
||||||
|
{
|
||||||
var t3 = g.mysql.Ado.Query<xxx>("select * from song");
|
var t3 = g.mysql.Ado.Query<xxx>("select * from song");
|
||||||
|
|
||||||
var t4 = g.mysql.Ado.Query<(int, string, string)>("select * from song");
|
var t4 = g.mysql.Ado.Query<(int, string, string)>("select * from song");
|
||||||
@ -41,11 +50,13 @@ namespace FreeSql.Tests.MySqlConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void QueryMultipline() {
|
public void QueryMultipline()
|
||||||
|
{
|
||||||
var t3 = g.mysql.Ado.Query<xxx, (int, string, string), dynamic>("select * from song; select * from song; select * from song");
|
var t3 = g.mysql.Ado.Query<xxx, (int, string, string), dynamic>("select * from song; select * from song; select * from song");
|
||||||
}
|
}
|
||||||
|
|
||||||
class xxx {
|
class xxx
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
public string Title2 { get; set; }
|
public string Title2 { get; set; }
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorExpression {
|
namespace FreeSql.Tests.MySqlConnectorExpression
|
||||||
public class ConvertTest {
|
{
|
||||||
|
public class ConvertTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,13 +22,15 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -33,111 +38,129 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToBoolean() {
|
public void ToBoolean()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (Convert.ToBoolean(a.Clicks) ? 1 : 0) > 0).ToList());
|
data.Add(select.Where(a => (Convert.ToBoolean(a.Clicks) ? 1 : 0) > 0).ToList());
|
||||||
data.Add(select.Where(a => (bool.Parse(a.Clicks.ToString()) ? 1 : 0) > 0).ToList());
|
data.Add(select.Where(a => (bool.Parse(a.Clicks.ToString()) ? 1 : 0) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToByte() {
|
public void ToByte()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToByte(a.Clicks % 255) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToByte(a.Clicks % 255) > 0).ToList());
|
||||||
data.Add(select.Where(a => byte.Parse((a.Clicks % 255).ToString()) > 0).ToList());
|
data.Add(select.Where(a => byte.Parse((a.Clicks % 255).ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToChar() {
|
public void ToChar()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToChar(a.Clicks) == '1').ToList());
|
data.Add(select.Where(a => Convert.ToChar(a.Clicks) == '1').ToList());
|
||||||
data.Add(select.Where(a => char.Parse(a.Clicks.ToString()) == '1').ToList());
|
data.Add(select.Where(a => char.Parse(a.Clicks.ToString()) == '1').ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDateTime() {
|
public void ToDateTime()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToDateTime(a.CreateTime.ToString()).Year > 0).ToList());
|
data.Add(select.Where(a => Convert.ToDateTime(a.CreateTime.ToString()).Year > 0).ToList());
|
||||||
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()).Year > 0).ToList());
|
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()).Year > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDecimal() {
|
public void ToDecimal()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToDecimal(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToDecimal(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => decimal.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => decimal.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDouble() {
|
public void ToDouble()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToDouble(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToDouble(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => double.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => double.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToInt16() {
|
public void ToInt16()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToInt16(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToInt16(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => short.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => short.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToInt32() {
|
public void ToInt32()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (int)a.Clicks > 0).ToList());
|
data.Add(select.Where(a => (int)a.Clicks > 0).ToList());
|
||||||
data.Add(select.Where(a => Convert.ToInt32(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToInt32(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => int.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => int.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToInt64() {
|
public void ToInt64()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToInt64(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToInt64(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => long.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => long.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSByte() {
|
public void ToSByte()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToSByte(a.Clicks % 128) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToSByte(a.Clicks % 128) > 0).ToList());
|
||||||
data.Add(select.Where(a => sbyte.Parse((a.Clicks % 128).ToString()) > 0).ToList());
|
data.Add(select.Where(a => sbyte.Parse((a.Clicks % 128).ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSingle() {
|
public void ToSingle()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToSingle(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToSingle(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => float.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => float.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_ToString() {
|
public void this_ToString()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToString(a.Clicks).Equals("")).ToList());
|
data.Add(select.Where(a => Convert.ToString(a.Clicks).Equals("")).ToList());
|
||||||
data.Add(select.Where(a => a.Clicks.ToString().Equals("")).ToList());
|
data.Add(select.Where(a => a.Clicks.ToString().Equals("")).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUInt16() {
|
public void ToUInt16()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToUInt16(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToUInt16(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => ushort.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => ushort.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUInt32() {
|
public void ToUInt32()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToUInt32(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToUInt32(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => uint.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => uint.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUInt64() {
|
public void ToUInt64()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToUInt64(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToUInt64(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => ulong.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => ulong.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid_Parse() {
|
public void Guid_Parse()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Guid.Parse(Guid.Empty.ToString()) == Guid.Empty).ToList());
|
data.Add(select.Where(a => Guid.Parse(Guid.Empty.ToString()) == Guid.Empty).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid_NewGuid() {
|
public void Guid_NewGuid()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
//data.Add(select.OrderBy(a => Guid.NewGuid()).Limit(10).ToList());
|
//data.Add(select.OrderBy(a => Guid.NewGuid()).Limit(10).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Random() {
|
public void Random()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => new Random().Next() > a.Clicks).Limit(10).ToList());
|
data.Add(select.Where(a => new Random().Next() > a.Clicks).Limit(10).ToList());
|
||||||
data.Add(select.Where(a => new Random().NextDouble() > a.Clicks).Limit(10).ToList());
|
data.Add(select.Where(a => new Random().NextDouble() > a.Clicks).Limit(10).ToList());
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorExpression {
|
namespace FreeSql.Tests.MySqlConnectorExpression
|
||||||
public class DateTimeTest {
|
{
|
||||||
|
public class DateTimeTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic111333")]
|
[Table(Name = "tb_topic111333")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
[Table(Name = "TestTypeInfo333")]
|
[Table(Name = "TestTypeInfo333")]
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
@ -29,7 +33,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public DateTime Time { get; set; }
|
public DateTime Time { get; set; }
|
||||||
}
|
}
|
||||||
[Table(Name = "TestTypeParentInfo23123")]
|
[Table(Name = "TestTypeParentInfo23123")]
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -37,7 +42,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public DateTime Time2 { get; set; }
|
public DateTime Time2 { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Now() {
|
public void Now()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -45,7 +51,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(now(), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(now(), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UtcNow() {
|
public void UtcNow()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.UtcNow.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.UtcNow.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -53,7 +60,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(utc_timestamp(), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(utc_timestamp(), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MinValue() {
|
public void MinValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MinValue.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MinValue.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -61,7 +69,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('0001/1/1 0:00:00' as datetime), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('0001/1/1 0:00:00' as datetime), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MaxValue() {
|
public void MaxValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MaxValue.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MaxValue.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -69,7 +78,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('9999/12/31 23:59:59' as datetime), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('9999/12/31 23:59:59' as datetime), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Date() {
|
public void Date()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Date > DateTime.Now.Date).ToList());
|
data.Add(select.Where(a => a.Type.Time.Date > DateTime.Now.Date).ToList());
|
||||||
@ -101,7 +111,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, cast(date_format(a__Type__Parent.`Time2`, '%Y-%m-%d') as datetime), now())) / 1000000) > 0)
|
//WHERE (((timestampdiff(microsecond, cast(date_format(a__Type__Parent.`Time2`, '%Y-%m-%d') as datetime), now())) / 1000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeOfDay() {
|
public void TimeOfDay()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay == DateTime.Now.TimeOfDay).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay == DateTime.Now.TimeOfDay).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.TimeOfDay > DateTime.Now.TimeOfDay).ToList());
|
data.Add(select.Where(a => a.Type.Time.TimeOfDay > DateTime.Now.TimeOfDay).ToList());
|
||||||
@ -119,7 +130,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a__Type__Parent.`Time2`, '1970-1-1 %H:%i:%s.%f'), a__Type__Parent.`Time2`) + 62135596800000000) > (timestampdiff(microsecond, date_format(now(), '1970-1-1 %H:%i:%s.%f'), now()) + 62135596800000000))
|
//WHERE ((timestampdiff(microsecond, date_format(a__Type__Parent.`Time2`, '1970-1-1 %H:%i:%s.%f'), a__Type__Parent.`Time2`) + 62135596800000000) > (timestampdiff(microsecond, date_format(now(), '1970-1-1 %H:%i:%s.%f'), now()) + 62135596800000000))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DayOfWeek() {
|
public void DayOfWeek()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
data.Add(select.Where(a => a.CreateTime.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
data.Add(select.Where(a => a.Type.Time.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
||||||
@ -137,7 +149,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((dayofweek(a__Type__Parent.`Time2`) - 1) > (dayofweek(now()) - 1))
|
//WHERE ((dayofweek(a__Type__Parent.`Time2`) - 1) > (dayofweek(now()) - 1))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Day() {
|
public void Day()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Day > DateTime.Now.Day).ToList());
|
data.Add(select.Where(a => a.CreateTime.Day > DateTime.Now.Day).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Day > DateTime.Now.Day).ToList());
|
data.Add(select.Where(a => a.Type.Time.Day > DateTime.Now.Day).ToList());
|
||||||
@ -155,7 +168,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (dayofmonth(a__Type__Parent.`Time2`) > dayofmonth(now()))
|
//WHERE (dayofmonth(a__Type__Parent.`Time2`) > dayofmonth(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DayOfYear() {
|
public void DayOfYear()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
data.Add(select.Where(a => a.CreateTime.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
data.Add(select.Where(a => a.Type.Time.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
||||||
@ -173,7 +187,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (dayofyear(a__Type__Parent.`Time2`) > dayofyear(now()))
|
//WHERE (dayofyear(a__Type__Parent.`Time2`) > dayofyear(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Month() {
|
public void Month()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Month > DateTime.Now.Month).ToList());
|
data.Add(select.Where(a => a.CreateTime.Month > DateTime.Now.Month).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Month > DateTime.Now.Month).ToList());
|
data.Add(select.Where(a => a.Type.Time.Month > DateTime.Now.Month).ToList());
|
||||||
@ -191,7 +206,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (month(a__Type__Parent.`Time2`) > month(now()))
|
//WHERE (month(a__Type__Parent.`Time2`) > month(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Year() {
|
public void Year()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Year > DateTime.Now.Year).ToList());
|
data.Add(select.Where(a => a.CreateTime.Year > DateTime.Now.Year).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Year > DateTime.Now.Year).ToList());
|
data.Add(select.Where(a => a.Type.Time.Year > DateTime.Now.Year).ToList());
|
||||||
@ -209,7 +225,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (year(a__Type__Parent.`Time2`) > year(now()))
|
//WHERE (year(a__Type__Parent.`Time2`) > year(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Hour() {
|
public void Hour()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Hour > DateTime.Now.Hour).ToList());
|
data.Add(select.Where(a => a.CreateTime.Hour > DateTime.Now.Hour).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Hour > DateTime.Now.Hour).ToList());
|
data.Add(select.Where(a => a.Type.Time.Hour > DateTime.Now.Hour).ToList());
|
||||||
@ -227,7 +244,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (hour(a__Type__Parent.`Time2`) > hour(now()))
|
//WHERE (hour(a__Type__Parent.`Time2`) > hour(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Minute() {
|
public void Minute()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Minute > DateTime.Now.Minute).ToList());
|
data.Add(select.Where(a => a.CreateTime.Minute > DateTime.Now.Minute).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Minute > DateTime.Now.Minute).ToList());
|
data.Add(select.Where(a => a.Type.Time.Minute > DateTime.Now.Minute).ToList());
|
||||||
@ -245,7 +263,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (minute(a__Type__Parent.`Time2`) > minute(now()))
|
//WHERE (minute(a__Type__Parent.`Time2`) > minute(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Second() {
|
public void Second()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Second > DateTime.Now.Second).ToList());
|
data.Add(select.Where(a => a.CreateTime.Second > DateTime.Now.Second).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Second > DateTime.Now.Second).ToList());
|
data.Add(select.Where(a => a.Type.Time.Second > DateTime.Now.Second).ToList());
|
||||||
@ -263,7 +282,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (second(a__Type__Parent.`Time2`) > second(now()))
|
//WHERE (second(a__Type__Parent.`Time2`) > second(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Millisecond() {
|
public void Millisecond()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Millisecond > DateTime.Now.Millisecond).ToList());
|
data.Add(select.Where(a => a.CreateTime.Millisecond > DateTime.Now.Millisecond).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Millisecond > DateTime.Now.Millisecond).ToList());
|
data.Add(select.Where(a => a.Type.Time.Millisecond > DateTime.Now.Millisecond).ToList());
|
||||||
@ -281,7 +301,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (floor(microsecond(a__Type__Parent.`Time2`) / 1000) > floor(microsecond(now()) / 1000))
|
//WHERE (floor(microsecond(a__Type__Parent.`Time2`) / 1000) > floor(microsecond(now()) / 1000))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Ticks() {
|
public void Ticks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Ticks > DateTime.Now.Ticks).ToList());
|
data.Add(select.Where(a => a.CreateTime.Ticks > DateTime.Now.Ticks).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Ticks > DateTime.Now.Ticks).ToList());
|
data.Add(select.Where(a => a.Type.Time.Ticks > DateTime.Now.Ticks).ToList());
|
||||||
@ -299,7 +320,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, '1970-1-1', a__Type__Parent.`Time2`) * 10 + 621355968000000000) > (timestampdiff(microsecond, '1970-1-1', now()) * 10 + 621355968000000000))
|
//WHERE ((timestampdiff(microsecond, '1970-1-1', a__Type__Parent.`Time2`) * 10 + 621355968000000000) > (timestampdiff(microsecond, '1970-1-1', now()) * 10 + 621355968000000000))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Add() {
|
public void Add()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
||||||
@ -317,7 +339,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddDays() {
|
public void AddDays()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddDays(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddDays(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddDays(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddDays(1) > DateTime.Now).ToList());
|
||||||
@ -335,7 +358,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) day) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) day) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddHours() {
|
public void AddHours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddHours(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddHours(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddHours(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddHours(1) > DateTime.Now).ToList());
|
||||||
@ -353,7 +377,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) hour) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) hour) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddMilliseconds() {
|
public void AddMilliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddMilliseconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddMilliseconds(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddMilliseconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddMilliseconds(1) > DateTime.Now).ToList());
|
||||||
@ -371,7 +396,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) * 1000 microsecond) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) * 1000 microsecond) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddMinutes() {
|
public void AddMinutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddMinutes(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddMinutes(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddMinutes(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddMinutes(1) > DateTime.Now).ToList());
|
||||||
@ -389,7 +415,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) minute) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) minute) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddMonths() {
|
public void AddMonths()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddMonths(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddMonths(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddMonths(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddMonths(1) > DateTime.Now).ToList());
|
||||||
@ -407,7 +434,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) month) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) month) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddSeconds() {
|
public void AddSeconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddSeconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddSeconds(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddSeconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddSeconds(1) > DateTime.Now).ToList());
|
||||||
@ -425,7 +453,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) second) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) second) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddTicks() {
|
public void AddTicks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddTicks(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddTicks(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddTicks(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddTicks(1) > DateTime.Now).ToList());
|
||||||
@ -443,7 +472,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) / 10 microsecond) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) / 10 microsecond) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddYears() {
|
public void AddYears()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddYears(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddYears(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1) > DateTime.Now).ToList());
|
||||||
@ -461,7 +491,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) year) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) year) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Subtract() {
|
public void Subtract()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => a.Type.Time.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
||||||
@ -493,7 +524,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (date_sub(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > a.`CreateTime`)
|
//WHERE (date_sub(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > a.`CreateTime`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_Equals() {
|
public void this_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddYears(1).Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddYears(1).Equals(DateTime.Now)).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1).Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1).Equals(DateTime.Now)).ToList());
|
||||||
@ -511,7 +543,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_ToString() {
|
public void this_ToString()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.ToString().Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.CreateTime.ToString().Equals(DateTime.Now)).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1).ToString().Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1).ToString().Equals(DateTime.Now)).ToList());
|
||||||
@ -530,7 +563,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_Compare() {
|
public void DateTime_Compare()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.CompareTo(DateTime.Now) == 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.CompareTo(DateTime.Now) == 0).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1).CompareTo(DateTime.Now) == 0).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1).CompareTo(DateTime.Now) == 0).ToList());
|
||||||
@ -548,7 +582,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((date_add(a__Type__Parent.`Time2`, interval (1) year)) - (now())) = 0)
|
//WHERE (((date_add(a__Type__Parent.`Time2`, interval (1) year)) - (now())) = 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_DaysInMonth() {
|
public void DateTime_DaysInMonth()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.DaysInMonth(a.CreateTime.Year, a.CreateTime.Month) > 30).ToList());
|
data.Add(select.Where(a => DateTime.DaysInMonth(a.CreateTime.Year, a.CreateTime.Month) > 30).ToList());
|
||||||
data.Add(select.Where(a => DateTime.DaysInMonth(a.Type.Time.Year, a.Type.Time.Month) > 30).ToList());
|
data.Add(select.Where(a => DateTime.DaysInMonth(a.Type.Time.Year, a.Type.Time.Month) > 30).ToList());
|
||||||
@ -566,7 +601,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (dayofmonth(last_day(concat(year(a__Type__Parent.`Time2`), month(a__Type__Parent.`Time2`), '-01'))) > 30)
|
//WHERE (dayofmonth(last_day(concat(year(a__Type__Parent.`Time2`), month(a__Type__Parent.`Time2`), '-01'))) > 30)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_Equals() {
|
public void DateTime_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.Equals(a.CreateTime.AddYears(1), DateTime.Now)).ToList());
|
data.Add(select.Where(a => DateTime.Equals(a.CreateTime.AddYears(1), DateTime.Now)).ToList());
|
||||||
data.Add(select.Where(a => DateTime.Equals(a.Type.Time.AddYears(1), DateTime.Now)).ToList());
|
data.Add(select.Where(a => DateTime.Equals(a.Type.Time.AddYears(1), DateTime.Now)).ToList());
|
||||||
@ -584,7 +620,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_IsLeapYear() {
|
public void DateTime_IsLeapYear()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.IsLeapYear(a.CreateTime.Year)).ToList());
|
data.Add(select.Where(a => DateTime.IsLeapYear(a.CreateTime.Year)).ToList());
|
||||||
data.Add(select.Where(a => DateTime.IsLeapYear(a.Type.Time.AddYears(1).Year)).ToList());
|
data.Add(select.Where(a => DateTime.IsLeapYear(a.Type.Time.AddYears(1).Year)).ToList());
|
||||||
@ -602,7 +639,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 4 = 0 AND (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 100 <> 0 OR (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 400 = 0))
|
//WHERE (((year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 4 = 0 AND (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 100 <> 0 OR (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 400 = 0))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_Parse() {
|
public void DateTime_Parse()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()) > DateTime.Now).ToList());
|
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => DateTime.Parse(a.Type.Time.AddYears(1).ToString()) > DateTime.Now).ToList());
|
data.Add(select.Where(a => DateTime.Parse(a.Type.Time.AddYears(1).ToString()) > DateTime.Now).ToList());
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorExpression {
|
namespace FreeSql.Tests.MySqlConnectorExpression
|
||||||
public class MathTest {
|
{
|
||||||
|
public class MathTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,13 +22,15 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -33,98 +38,117 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PI() {
|
public void PI()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.PI + a.Clicks > 0).ToList());
|
data.Add(select.Where(a => Math.PI + a.Clicks > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Abs() {
|
public void Abs()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Abs(-a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Math.Abs(-a.Clicks) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sign() {
|
public void Sign()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Sign(-a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Math.Sign(-a.Clicks) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Floor() {
|
public void Floor()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Floor(a.Clicks + 0.5) == a.Clicks).ToList());
|
data.Add(select.Where(a => Math.Floor(a.Clicks + 0.5) == a.Clicks).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Ceiling() {
|
public void Ceiling()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Ceiling(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Ceiling(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Round() {
|
public void Round()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5) == a.Clicks).ToList());
|
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5) == a.Clicks).ToList());
|
||||||
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5, 1) > a.Clicks).ToList());
|
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5, 1) > a.Clicks).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Exp() {
|
public void Exp()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Exp(1) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Exp(1) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Log() {
|
public void Log()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Log(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Log(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Log10() {
|
public void Log10()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Log10(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Log10(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Pow() {
|
public void Pow()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Pow(2, a.Clicks) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Pow(2, a.Clicks) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sqrt() {
|
public void Sqrt()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Sqrt(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Sqrt(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Cos() {
|
public void Cos()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Cos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Cos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sin() {
|
public void Sin()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Sin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Sin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Tan() {
|
public void Tan()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Tan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Tan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Acos() {
|
public void Acos()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Acos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Acos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Asin() {
|
public void Asin()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Asin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Asin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Atan() {
|
public void Atan()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Atan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Atan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Atan2() {
|
public void Atan2()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Atan2(2, a.Clicks) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Atan2(2, a.Clicks) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Truncate() {
|
public void Truncate()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Truncate(a.Clicks * 1.0 / 3) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Truncate(a.Clicks * 1.0 / 3) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,21 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorExpression {
|
namespace FreeSql.Tests.MySqlConnectorExpression
|
||||||
public class OtherTest {
|
{
|
||||||
|
public class OtherTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
||||||
|
|
||||||
public OtherTest() {
|
public OtherTest()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean() {
|
public void Boolean()
|
||||||
|
{
|
||||||
var t1 = select.Where(a => a.testFieldBool == true).ToList();
|
var t1 = select.Where(a => a.testFieldBool == true).ToList();
|
||||||
var t2 = select.Where(a => a.testFieldBool != true).ToList();
|
var t2 = select.Where(a => a.testFieldBool != true).ToList();
|
||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
@ -30,7 +34,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Array() {
|
public void Array()
|
||||||
|
{
|
||||||
int[] nullarr = null;
|
int[] nullarr = null;
|
||||||
Assert.Throws<MySqlException>(() => { select.Where(a => nullarr.Contains(a.testFieldInt)).ToList(); });
|
Assert.Throws<MySqlException>(() => { select.Where(a => nullarr.Contains(a.testFieldInt)).ToList(); });
|
||||||
Assert.Throws<MySqlException>(() => { select.Where(a => new int[0].Contains(a.testFieldInt)).ToList(); });
|
Assert.Throws<MySqlException>(() => { select.Where(a => new int[0].Contains(a.testFieldInt)).ToList(); });
|
||||||
@ -64,7 +69,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
class TableAllType {
|
class TableAllType
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorExpression {
|
namespace FreeSql.Tests.MySqlConnectorExpression
|
||||||
public class StringTest {
|
{
|
||||||
|
public class StringTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,26 +22,30 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
class TestEqualsGuid {
|
class TestEqualsGuid
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public bool IsDeleted { get; set; }
|
public bool IsDeleted { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Equals__() {
|
public void Equals__()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.Equals("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.Equals("aaa")).ToList());
|
||||||
list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
|
list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
|
||||||
@ -46,7 +53,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Empty() {
|
public void Empty()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (a.Title ?? "") == string.Empty).ToSql());
|
data.Add(select.Where(a => (a.Title ?? "") == string.Empty).ToSql());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -55,7 +63,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void StartsWith() {
|
public void StartsWith()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.StartsWith("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.StartsWith("aaa")).ToList());
|
||||||
list.Add(select.Where(a => a.Title.StartsWith(a.Title)).ToList());
|
list.Add(select.Where(a => a.Title.StartsWith(a.Title)).ToList());
|
||||||
@ -97,7 +106,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`))
|
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EndsWith() {
|
public void EndsWith()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.EndsWith("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.EndsWith("aaa")).ToList());
|
||||||
list.Add(select.Where(a => a.Title.EndsWith(a.Title)).ToList());
|
list.Add(select.Where(a => a.Title.EndsWith(a.Title)).ToList());
|
||||||
@ -139,7 +149,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat(a__Type.`Name`, '%'))
|
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat(a__Type.`Name`, '%'))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Contains() {
|
public void Contains()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.Contains("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.Contains("aaa")).ToList());
|
||||||
list.Add(select.Where(a => a.Title.Contains(a.Title)).ToList());
|
list.Add(select.Where(a => a.Title.Contains(a.Title)).ToList());
|
||||||
@ -181,7 +192,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%'))
|
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%'))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToLower() {
|
public void ToLower()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.ToLower() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.ToLower() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.ToLower() == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.ToLower() == a.Title).ToList());
|
||||||
@ -223,7 +235,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE(lower(concat(lower(a.`Title`), 'aaa')) = a__Type.`Name`)
|
//WHERE(lower(concat(lower(a.`Title`), 'aaa')) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUpper() {
|
public void ToUpper()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.ToUpper() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.ToUpper() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.ToUpper() == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.ToUpper() == a.Title).ToList());
|
||||||
@ -265,7 +278,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (upper(concat(upper(a.`Title`), 'aaa')) = a__Type.`Name`)
|
//WHERE (upper(concat(upper(a.`Title`), 'aaa')) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Substring() {
|
public void Substring()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Substring(0) == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.Substring(0) == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.Substring(0) == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.Substring(0) == a.Title).ToList());
|
||||||
@ -307,7 +321,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (substr(concat(substr(a.`Title`, 1), 'aaa'), 2, 2) = a__Type.`Name`)
|
//WHERE (substr(concat(substr(a.`Title`, 1), 'aaa'), 2, 2) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Length() {
|
public void Length()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Length == 0).ToList());
|
data.Add(select.Where(a => a.Title.Length == 0).ToList());
|
||||||
data.Add(select.Where(a => a.Title.Length == 1).ToList());
|
data.Add(select.Where(a => a.Title.Length == 1).ToList());
|
||||||
@ -349,7 +364,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (char_length(concat(a.`Title`, 'aaa')) = char_length(a__Type.`Name`))
|
//WHERE (char_length(concat(a.`Title`, 'aaa')) = char_length(a__Type.`Name`))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IndexOf() {
|
public void IndexOf()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.IndexOf("aaa") == -1).ToList());
|
data.Add(select.Where(a => a.Title.IndexOf("aaa") == -1).ToList());
|
||||||
data.Add(select.Where(a => a.Title.IndexOf("aaa", 2) == -1).ToList());
|
data.Add(select.Where(a => a.Title.IndexOf("aaa", 2) == -1).ToList());
|
||||||
@ -391,7 +407,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((locate(concat(a.`Title`, 'aaa'), 'aaa', 3) - 1) = char_length(a__Type.`Name`) + 1)
|
//WHERE ((locate(concat(a.`Title`, 'aaa'), 'aaa', 3) - 1) = char_length(a__Type.`Name`) + 1)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PadLeft() {
|
public void PadLeft()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == a.Title).ToList());
|
||||||
@ -433,7 +450,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (lpad(concat(lpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
//WHERE (lpad(concat(lpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PadRight() {
|
public void PadRight()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == a.Title).ToList());
|
||||||
@ -475,7 +493,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (rpad(concat(rpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
//WHERE (rpad(concat(rpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Trim() {
|
public void Trim()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Trim() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.Trim() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.Trim('a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.Trim('a') == a.Title).ToList());
|
||||||
@ -517,7 +536,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (trim('c' from trim('b' from trim('a' from concat(trim('c' from trim('b' from trim('a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
//WHERE (trim('c' from trim('b' from trim('a' from concat(trim('c' from trim('b' from trim('a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TrimStart() {
|
public void TrimStart()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.TrimStart() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.TrimStart() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.TrimStart('a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.TrimStart('a') == a.Title).ToList());
|
||||||
@ -559,7 +579,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from concat(trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from a.`Title`)))))), 'aaa'))))))) = a__Type.`Name`)
|
//WHERE (trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from concat(trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from a.`Title`)))))), 'aaa'))))))) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TrimEnd() {
|
public void TrimEnd()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.TrimEnd() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.TrimEnd() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.TrimEnd('a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.TrimEnd('a') == a.Title).ToList());
|
||||||
@ -601,7 +622,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from concat(trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
//WHERE (trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from concat(trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Replace() {
|
public void Replace()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Replace("a", "b") == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.Replace("a", "b") == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.Replace("a", "b").Replace("b", "c") == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.Replace("a", "b").Replace("b", "c") == a.Title).ToList());
|
||||||
@ -643,7 +665,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (concat(replace(replace(replace(a.`Title`, 'a', 'b'), 'b', 'c'), a__Type.`Name`, 'a'), 'aaa') = a__Type.`Name`)
|
//WHERE (concat(replace(replace(replace(a.`Title`, 'a', 'b'), 'b', 'c'), a__Type.`Name`, 'a'), 'aaa') = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CompareTo() {
|
public void CompareTo()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.CompareTo(a.Title) == 0).ToList());
|
data.Add(select.Where(a => a.Title.CompareTo(a.Title) == 0).ToList());
|
||||||
data.Add(select.Where(a => a.Title.CompareTo(a.Title) > 0).ToList());
|
data.Add(select.Where(a => a.Title.CompareTo(a.Title) > 0).ToList());
|
||||||
@ -686,7 +709,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void string_IsNullOrEmpty() {
|
public void string_IsNullOrEmpty()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title)).ToList());
|
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title)).ToList());
|
||||||
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title) == false).ToList());
|
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title) == false).ToList());
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnectorExpression {
|
namespace FreeSql.Tests.MySqlConnectorExpression
|
||||||
public class TimeSpanTest {
|
{
|
||||||
|
public class TimeSpanTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,20 +22,23 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Zero() {
|
public void Zero()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -40,7 +46,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > 0)
|
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MinValue() {
|
public void MinValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.MinValue).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.MinValue).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -48,7 +55,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > -922337203685477580)
|
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > -922337203685477580)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MaxValue() {
|
public void MaxValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay < TimeSpan.MaxValue).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay < TimeSpan.MaxValue).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -56,7 +64,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) < 922337203685477580)
|
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) < 922337203685477580)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Days() {
|
public void Days()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Days == 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Days == 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -64,7 +73,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 86400000000) = 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 86400000000) = 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Hours() {
|
public void Hours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Hours > 0).ToSql());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Hours > 0).ToSql());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -72,7 +82,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 3600000000) mod 24 > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 3600000000) mod 24 > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Milliseconds() {
|
public void Milliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Milliseconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Milliseconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -80,7 +91,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000 mod 1000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000 mod 1000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Minutes() {
|
public void Minutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Minutes > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Minutes > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -88,7 +100,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 60000000 mod 60) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 60000000 mod 60) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Seconds() {
|
public void Seconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Seconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Seconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -96,7 +109,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000000 mod 60) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000000 mod 60) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Ticks() {
|
public void Ticks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Ticks > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Ticks > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -104,7 +118,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) * 10) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) * 10) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalDays() {
|
public void TotalDays()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalDays > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalDays > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -112,7 +127,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 86400000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 86400000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalHours() {
|
public void TotalHours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalHours > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalHours > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -120,7 +136,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 3600000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 3600000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalMilliseconds() {
|
public void TotalMilliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMilliseconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMilliseconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -128,7 +145,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalMinutes() {
|
public void TotalMinutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMinutes > 0).ToSql());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMinutes > 0).ToSql());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -136,7 +154,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 60000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 60000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalSeconds() {
|
public void TotalSeconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalSeconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -144,7 +163,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Add() {
|
public void Add()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Add(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Add(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -152,7 +172,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) + (1 * 86400000000)) > 0)
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) + (1 * 86400000000)) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Subtract() {
|
public void Subtract()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Subtract(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Subtract(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -160,7 +181,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) - (1 * 86400000000)) > 0)
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) - (1 * 86400000000)) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CompareTo() {
|
public void CompareTo()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.CompareTo(TimeSpan.FromDays(1)) > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.CompareTo(TimeSpan.FromDays(1)) > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -168,7 +190,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_Equals() {
|
public void this_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Equals(TimeSpan.FromDays(1))).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Equals(TimeSpan.FromDays(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -176,7 +199,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_ToString() {
|
public void this_ToString()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.ToString() == "ssss").ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.ToString() == "ssss").ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -185,7 +209,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_Compare() {
|
public void TimeSpan_Compare()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Compare(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1)) > 0).ToList());
|
data.Add(select.Where(a => TimeSpan.Compare(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1)) > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -193,7 +218,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_Equals() {
|
public void TimeSpan_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -201,7 +227,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromDays() {
|
public void TimeSpan_FromDays()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -209,7 +236,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromHours() {
|
public void TimeSpan_FromHours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromHours(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromHours(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -217,7 +245,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 3600000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 3600000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromMilliseconds() {
|
public void TimeSpan_FromMilliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMilliseconds(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMilliseconds(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -225,7 +254,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromMinutes() {
|
public void TimeSpan_FromMinutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMinutes(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMinutes(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -233,7 +263,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 60000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 60000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromSeconds() {
|
public void TimeSpan_FromSeconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromSeconds(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromSeconds(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -241,7 +272,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromTicks() {
|
public void TimeSpan_FromTicks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromTicks(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromTicks(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -249,7 +281,8 @@ namespace FreeSql.Tests.MySqlConnectorExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 / 10)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 / 10)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_Parse() {
|
public void TimeSpan_Parse()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Parse(a.CreateTime.TimeOfDay.ToString()) > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => TimeSpan.Parse(a.CreateTime.TimeOfDay.ToString()) > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
|
@ -2,17 +2,21 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlConnector {
|
namespace FreeSql.Tests.MySqlConnector
|
||||||
public class MySqlDbFirstTest {
|
{
|
||||||
|
public class MySqlDbFirstTest
|
||||||
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases() {
|
public void GetDatabases()
|
||||||
|
{
|
||||||
|
|
||||||
var t1 = g.mysql.DbFirst.GetDatabases();
|
var t1 = g.mysql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase() {
|
public void GetTablesByDatabase()
|
||||||
|
{
|
||||||
|
|
||||||
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
||||||
|
|
||||||
|
@ -4,16 +4,19 @@ using System.Diagnostics;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
|
||||||
public class g {
|
public class g
|
||||||
|
{
|
||||||
|
|
||||||
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
||||||
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
|
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
|
||||||
.UseAutoSyncStructure(true)
|
.UseAutoSyncStructure(true)
|
||||||
.UseMonitorCommand(
|
.UseMonitorCommand(
|
||||||
cmd => {
|
cmd =>
|
||||||
|
{
|
||||||
Trace.WriteLine(cmd.CommandText);
|
Trace.WriteLine(cmd.CommandText);
|
||||||
}, //监听SQL命令对象,在执行前
|
}, //监听SQL命令对象,在执行前
|
||||||
(cmd, traceLog) => {
|
(cmd, traceLog) =>
|
||||||
|
{
|
||||||
Console.WriteLine(traceLog);
|
Console.WriteLine(traceLog);
|
||||||
}) //监听SQL命令对象,在执行后
|
}) //监听SQL命令对象,在执行后
|
||||||
.UseLazyLoading(true)
|
.UseLazyLoading(true)
|
||||||
|
@ -4,40 +4,51 @@ using System;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.DataAnnotations {
|
namespace FreeSql.Tests.DataAnnotations
|
||||||
public class MySqlFluentTest {
|
{
|
||||||
|
public class MySqlFluentTest
|
||||||
|
{
|
||||||
|
|
||||||
public MySqlFluentTest() {
|
public MySqlFluentTest()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DisableSyncStructure() {
|
public void DisableSyncStructure()
|
||||||
|
{
|
||||||
Assert.Throws<MySqlException>(() => g.mysql.Select<ModelDisableSyncStructure>().ToList());
|
Assert.Throws<MySqlException>(() => g.mysql.Select<ModelDisableSyncStructure>().ToList());
|
||||||
|
|
||||||
g.mysql.Select<ModelSyncStructure>().ToList();
|
g.mysql.Select<ModelSyncStructure>().ToList();
|
||||||
}
|
}
|
||||||
[Table(DisableSyncStructure = true)]
|
[Table(DisableSyncStructure = true)]
|
||||||
class ModelDisableSyncStructure {
|
class ModelDisableSyncStructure
|
||||||
|
{
|
||||||
[Column(IsPrimary = false)]
|
[Column(IsPrimary = false)]
|
||||||
public int pkid { get; set; }
|
public int pkid { get; set; }
|
||||||
}
|
}
|
||||||
class ModelSyncStructure {
|
class ModelSyncStructure
|
||||||
|
{
|
||||||
[Column(IsPrimary = false)]
|
[Column(IsPrimary = false)]
|
||||||
public int pkid { get; set; }
|
public int pkid { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AopConfigEntity() {
|
public void AopConfigEntity()
|
||||||
|
{
|
||||||
g.mysql.CodeFirst.ConfigEntity<ModelAopConfigEntity>(a => a.Property(b => b.pkid).IsPrimary(true));
|
g.mysql.CodeFirst.ConfigEntity<ModelAopConfigEntity>(a => a.Property(b => b.pkid).IsPrimary(true));
|
||||||
|
|
||||||
g.mysql.Aop.ConfigEntity = (s, e) => {
|
g.mysql.Aop.ConfigEntity = (s, e) =>
|
||||||
|
{
|
||||||
var attr = e.EntityType.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.Schema.TableAttribute), false).FirstOrDefault() as System.ComponentModel.DataAnnotations.Schema.TableAttribute;
|
var attr = e.EntityType.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.Schema.TableAttribute), false).FirstOrDefault() as System.ComponentModel.DataAnnotations.Schema.TableAttribute;
|
||||||
if (attr != null) {
|
if (attr != null)
|
||||||
|
{
|
||||||
e.ModifyResult.Name = attr.Name;
|
e.ModifyResult.Name = attr.Name;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
g.mysql.Aop.ConfigEntityProperty = (s, e) => {
|
g.mysql.Aop.ConfigEntityProperty = (s, e) =>
|
||||||
if (e.Property.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.KeyAttribute), false).Any()) {
|
{
|
||||||
|
if (e.Property.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.KeyAttribute), false).Any())
|
||||||
|
{
|
||||||
e.ModifyResult.IsPrimary = true;
|
e.ModifyResult.IsPrimary = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -45,14 +56,16 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
var tsql1 = g.mysql.Select<ModelAopConfigEntity>().WhereDynamic(1).ToSql();
|
var tsql1 = g.mysql.Select<ModelAopConfigEntity>().WhereDynamic(1).ToSql();
|
||||||
}
|
}
|
||||||
[System.ComponentModel.DataAnnotations.Schema.Table("xxx")]
|
[System.ComponentModel.DataAnnotations.Schema.Table("xxx")]
|
||||||
class ModelAopConfigEntity {
|
class ModelAopConfigEntity
|
||||||
|
{
|
||||||
[System.ComponentModel.DataAnnotations.Key]
|
[System.ComponentModel.DataAnnotations.Key]
|
||||||
[Column(IsPrimary = false)]
|
[Column(IsPrimary = false)]
|
||||||
public int pkid { get; set; }
|
public int pkid { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Fluent() {
|
public void Fluent()
|
||||||
|
{
|
||||||
g.mysql.CodeFirst
|
g.mysql.CodeFirst
|
||||||
//.ConfigEntity<TestFluenttb1>(a => {
|
//.ConfigEntity<TestFluenttb1>(a => {
|
||||||
// a.Name("xxdkdkdk1").SelectFilter("a.Id22 > 0");
|
// a.Name("xxdkdkdk1").SelectFilter("a.Id22 > 0");
|
||||||
@ -60,13 +73,15 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||||
//})
|
//})
|
||||||
|
|
||||||
.ConfigEntity(typeof(TestFluenttb1), a => {
|
.ConfigEntity(typeof(TestFluenttb1), a =>
|
||||||
|
{
|
||||||
a.Name("xxdkdkdk1222").SelectFilter("a.Id22dd > 1");
|
a.Name("xxdkdkdk1222").SelectFilter("a.Id22dd > 1");
|
||||||
a.Property("Id").Name("Id22dd").IsIdentity(true);
|
a.Property("Id").Name("Id22dd").IsIdentity(true);
|
||||||
a.Property("Name").DbType("varchar(101)").IsNullable(true);
|
a.Property("Name").DbType("varchar(101)").IsNullable(true);
|
||||||
})
|
})
|
||||||
|
|
||||||
.ConfigEntity<TestFluenttb2>(a => {
|
.ConfigEntity<TestFluenttb2>(a =>
|
||||||
|
{
|
||||||
a.Name("xxdkdkdk2").SelectFilter("a.Idx > 0");
|
a.Name("xxdkdkdk2").SelectFilter("a.Idx > 0");
|
||||||
a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
||||||
a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||||
@ -101,7 +116,8 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IsIgnore() {
|
public void IsIgnore()
|
||||||
|
{
|
||||||
var item = new TestIsIgnore { };
|
var item = new TestIsIgnore { };
|
||||||
Assert.Equal(1, g.mysql.Insert<TestIsIgnore>().AppendData(item).ExecuteAffrows());
|
Assert.Equal(1, g.mysql.Insert<TestIsIgnore>().AppendData(item).ExecuteAffrows());
|
||||||
|
|
||||||
@ -110,7 +126,8 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
Assert.Equal(item.id, find.id);
|
Assert.Equal(item.id, find.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestIsIgnore {
|
class TestIsIgnore
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(IsIgnore = true)]
|
[Column(IsIgnore = true)]
|
||||||
|
@ -4,9 +4,11 @@ using System;
|
|||||||
using System.Data.SqlClient;
|
using System.Data.SqlClient;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.DataAnnotations {
|
namespace FreeSql.Tests.DataAnnotations
|
||||||
|
{
|
||||||
[Collection("SqlServerCollection")]
|
[Collection("SqlServerCollection")]
|
||||||
public class SqlServerFluentTest {
|
public class SqlServerFluentTest
|
||||||
|
{
|
||||||
|
|
||||||
SqlServerFixture _sqlserverFixture;
|
SqlServerFixture _sqlserverFixture;
|
||||||
|
|
||||||
@ -16,23 +18,27 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DisableSyncStructure() {
|
public void DisableSyncStructure()
|
||||||
|
{
|
||||||
Assert.Throws<SqlException>(() => _sqlserverFixture.SqlServer.Select<ModelDisableSyncStructure>().ToList());
|
Assert.Throws<SqlException>(() => _sqlserverFixture.SqlServer.Select<ModelDisableSyncStructure>().ToList());
|
||||||
|
|
||||||
_sqlserverFixture.SqlServer.Select<ModelSyncStructure>().ToList();
|
_sqlserverFixture.SqlServer.Select<ModelSyncStructure>().ToList();
|
||||||
}
|
}
|
||||||
[Table(DisableSyncStructure = true)]
|
[Table(DisableSyncStructure = true)]
|
||||||
class ModelDisableSyncStructure {
|
class ModelDisableSyncStructure
|
||||||
|
{
|
||||||
[Column(IsPrimary = false)]
|
[Column(IsPrimary = false)]
|
||||||
public int pkid { get; set; }
|
public int pkid { get; set; }
|
||||||
}
|
}
|
||||||
class ModelSyncStructure {
|
class ModelSyncStructure
|
||||||
|
{
|
||||||
[Column(IsPrimary = false)]
|
[Column(IsPrimary = false)]
|
||||||
public int pkid { get; set; }
|
public int pkid { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Fluent() {
|
public void Fluent()
|
||||||
|
{
|
||||||
_sqlserverFixture.SqlServer.CodeFirst
|
_sqlserverFixture.SqlServer.CodeFirst
|
||||||
//.ConfigEntity<TestFluenttb1>(a => {
|
//.ConfigEntity<TestFluenttb1>(a => {
|
||||||
// a.Name("xxdkdkdk1").SelectFilter("a.Id22 > 0");
|
// a.Name("xxdkdkdk1").SelectFilter("a.Id22 > 0");
|
||||||
@ -40,13 +46,15 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||||
//})
|
//})
|
||||||
|
|
||||||
.ConfigEntity(typeof(TestFluenttb1), a => {
|
.ConfigEntity(typeof(TestFluenttb1), a =>
|
||||||
|
{
|
||||||
a.Name("xxdkdkdk1222").SelectFilter("a.Id22dd > 1");
|
a.Name("xxdkdkdk1222").SelectFilter("a.Id22dd > 1");
|
||||||
a.Property("Id").Name("Id22dd").IsIdentity(true);
|
a.Property("Id").Name("Id22dd").IsIdentity(true);
|
||||||
a.Property("Name").DbType("varchar(101)").IsNullable(true);
|
a.Property("Name").DbType("varchar(101)").IsNullable(true);
|
||||||
})
|
})
|
||||||
|
|
||||||
.ConfigEntity<TestFluenttb2>(a => {
|
.ConfigEntity<TestFluenttb2>(a =>
|
||||||
|
{
|
||||||
a.Name("xxdkdkdk2").SelectFilter("a.Idx > 0");
|
a.Name("xxdkdkdk2").SelectFilter("a.Idx > 0");
|
||||||
a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
||||||
a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||||
@ -65,7 +73,8 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GroupPrimaryKey() {
|
public void GroupPrimaryKey()
|
||||||
|
{
|
||||||
_sqlserverFixture.SqlServer.CodeFirst.SyncStructure<TestgroupkeyTb>();
|
_sqlserverFixture.SqlServer.CodeFirst.SyncStructure<TestgroupkeyTb>();
|
||||||
g.mysql.CodeFirst.SyncStructure<TestgroupkeyTb>();
|
g.mysql.CodeFirst.SyncStructure<TestgroupkeyTb>();
|
||||||
g.pgsql.CodeFirst.SyncStructure<TestgroupkeyTb>();
|
g.pgsql.CodeFirst.SyncStructure<TestgroupkeyTb>();
|
||||||
@ -90,7 +99,8 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "test_groupkey")]
|
[Table(Name = "test_groupkey")]
|
||||||
class TestgroupkeyTb {
|
class TestgroupkeyTb
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
@ -101,7 +111,8 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IsIgnore() {
|
public void IsIgnore()
|
||||||
|
{
|
||||||
var item = new TestIsIgnore { };
|
var item = new TestIsIgnore { };
|
||||||
Assert.Equal(1, _sqlserverFixture.SqlServer.Insert<TestIsIgnore>().AppendData(item).ExecuteAffrows());
|
Assert.Equal(1, _sqlserverFixture.SqlServer.Insert<TestIsIgnore>().AppendData(item).ExecuteAffrows());
|
||||||
|
|
||||||
@ -110,7 +121,8 @@ namespace FreeSql.Tests.DataAnnotations {
|
|||||||
Assert.Equal(item.id, find.id);
|
Assert.Equal(item.id, find.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestIsIgnore {
|
class TestIsIgnore
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(IsIgnore = true)]
|
[Column(IsIgnore = true)]
|
||||||
|
@ -10,11 +10,14 @@ using Npgsql.LegacyPostgis;
|
|||||||
using FreeSql.Internal;
|
using FreeSql.Internal;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace FreeSql.ExpressionTree {
|
namespace FreeSql.ExpressionTree
|
||||||
public class GetDataReaderValueBlockExpressionTest {
|
{
|
||||||
|
public class GetDataReaderValueBlockExpressionTest
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid2() {
|
public void Guid2()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.Empty));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.Empty));
|
||||||
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid), Guid.Empty));
|
Assert.Equal(Guid.Empty, Utils.GetDataReaderValue(typeof(Guid), Guid.Empty));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.NewGuid()));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(Guid), Expression.Constant(Guid.NewGuid()));
|
||||||
@ -46,7 +49,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean() {
|
public void Boolean()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(bool), Expression.Constant(true));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(bool), Expression.Constant(true));
|
||||||
Assert.Equal(true, Utils.GetDataReaderValue(typeof(bool), true));
|
Assert.Equal(true, Utils.GetDataReaderValue(typeof(bool), true));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(bool), Expression.Constant(false));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(bool), Expression.Constant(false));
|
||||||
@ -79,7 +83,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(sbyte), Expression.Constant(sbyte.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(sbyte), Expression.Constant(sbyte.MinValue));
|
||||||
Assert.Equal(sbyte.MinValue, Utils.GetDataReaderValue(typeof(sbyte), sbyte.MinValue));
|
Assert.Equal(sbyte.MinValue, Utils.GetDataReaderValue(typeof(sbyte), sbyte.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(sbyte), Expression.Constant(sbyte.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(sbyte), Expression.Constant(sbyte.MaxValue));
|
||||||
@ -106,7 +111,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(short), Expression.Constant(short.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(short), Expression.Constant(short.MinValue));
|
||||||
Assert.Equal(short.MinValue, Utils.GetDataReaderValue(typeof(short), short.MinValue));
|
Assert.Equal(short.MinValue, Utils.GetDataReaderValue(typeof(short), short.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(short), Expression.Constant(short.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(short), Expression.Constant(short.MaxValue));
|
||||||
@ -133,7 +139,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(int), Expression.Constant(int.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(int), Expression.Constant(int.MinValue));
|
||||||
Assert.Equal(int.MinValue, Utils.GetDataReaderValue(typeof(int), int.MinValue));
|
Assert.Equal(int.MinValue, Utils.GetDataReaderValue(typeof(int), int.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(int), Expression.Constant(int.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(int), Expression.Constant(int.MaxValue));
|
||||||
@ -160,7 +167,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(long), Expression.Constant(long.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(long), Expression.Constant(long.MinValue));
|
||||||
Assert.Equal(long.MinValue, Utils.GetDataReaderValue(typeof(long), long.MinValue));
|
Assert.Equal(long.MinValue, Utils.GetDataReaderValue(typeof(long), long.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(long), Expression.Constant(long.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(long), Expression.Constant(long.MaxValue));
|
||||||
@ -187,7 +195,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(byte), Expression.Constant(byte.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(byte), Expression.Constant(byte.MinValue));
|
||||||
Assert.Equal(byte.MinValue, Utils.GetDataReaderValue(typeof(byte), byte.MinValue));
|
Assert.Equal(byte.MinValue, Utils.GetDataReaderValue(typeof(byte), byte.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(byte), Expression.Constant(byte.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(byte), Expression.Constant(byte.MaxValue));
|
||||||
@ -214,7 +223,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(ushort), Expression.Constant(ushort.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(ushort), Expression.Constant(ushort.MinValue));
|
||||||
Assert.Equal(ushort.MinValue, Utils.GetDataReaderValue(typeof(ushort), ushort.MinValue));
|
Assert.Equal(ushort.MinValue, Utils.GetDataReaderValue(typeof(ushort), ushort.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(ushort), Expression.Constant(ushort.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(ushort), Expression.Constant(ushort.MaxValue));
|
||||||
@ -241,7 +251,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(uint), Expression.Constant(uint.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(uint), Expression.Constant(uint.MinValue));
|
||||||
Assert.Equal(uint.MinValue, Utils.GetDataReaderValue(typeof(uint), uint.MinValue));
|
Assert.Equal(uint.MinValue, Utils.GetDataReaderValue(typeof(uint), uint.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(uint), Expression.Constant(uint.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(uint), Expression.Constant(uint.MaxValue));
|
||||||
@ -268,7 +279,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(ulong), Expression.Constant(ulong.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(ulong), Expression.Constant(ulong.MinValue));
|
||||||
Assert.Equal(ulong.MinValue, Utils.GetDataReaderValue(typeof(ulong), ulong.MinValue));
|
Assert.Equal(ulong.MinValue, Utils.GetDataReaderValue(typeof(ulong), ulong.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(ulong), Expression.Constant(ulong.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(ulong), Expression.Constant(ulong.MaxValue));
|
||||||
@ -295,7 +307,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Float() {
|
public void Float()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(float), Expression.Constant(float.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(float), Expression.Constant(float.MinValue));
|
||||||
Assert.Equal(float.MinValue, Utils.GetDataReaderValue(typeof(float), float.MinValue));
|
Assert.Equal(float.MinValue, Utils.GetDataReaderValue(typeof(float), float.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(float), Expression.Constant(float.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(float), Expression.Constant(float.MaxValue));
|
||||||
@ -322,7 +335,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Double() {
|
public void Double()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(double), Expression.Constant(double.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(double), Expression.Constant(double.MinValue));
|
||||||
Assert.Equal(double.MinValue, Utils.GetDataReaderValue(typeof(double), double.MinValue));
|
Assert.Equal(double.MinValue, Utils.GetDataReaderValue(typeof(double), double.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(double), Expression.Constant(double.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(double), Expression.Constant(double.MaxValue));
|
||||||
@ -349,7 +363,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Decimal() {
|
public void Decimal()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(decimal), Expression.Constant(decimal.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(decimal), Expression.Constant(decimal.MinValue));
|
||||||
Assert.Equal(decimal.MinValue, Utils.GetDataReaderValue(typeof(decimal), decimal.MinValue));
|
Assert.Equal(decimal.MinValue, Utils.GetDataReaderValue(typeof(decimal), decimal.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(decimal), Expression.Constant(decimal.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(decimal), Expression.Constant(decimal.MaxValue));
|
||||||
@ -376,7 +391,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime2() {
|
public void DateTime2()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(DateTime.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(DateTime.MinValue));
|
||||||
Assert.Equal(DateTime.MinValue, Utils.GetDataReaderValue(typeof(DateTime), DateTime.MinValue));
|
Assert.Equal(DateTime.MinValue, Utils.GetDataReaderValue(typeof(DateTime), DateTime.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(DateTime.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(DateTime), Expression.Constant(DateTime.MaxValue));
|
||||||
@ -403,7 +419,8 @@ namespace FreeSql.ExpressionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeOffset2() {
|
public void DateTimeOffset2()
|
||||||
|
{
|
||||||
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(DateTimeOffset.MinValue));
|
var exp1 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(DateTimeOffset.MinValue));
|
||||||
Assert.Equal(DateTimeOffset.MinValue, Utils.GetDataReaderValue(typeof(DateTimeOffset), DateTimeOffset.MinValue));
|
Assert.Equal(DateTimeOffset.MinValue, Utils.GetDataReaderValue(typeof(DateTimeOffset), DateTimeOffset.MinValue));
|
||||||
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(DateTimeOffset.MaxValue));
|
var exp2 = Utils.GetDataReaderValueBlockExpression(typeof(DateTimeOffset), Expression.Constant(DateTimeOffset.MaxValue));
|
||||||
|
@ -3,11 +3,14 @@ using System.Collections.Generic;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.Extensions {
|
namespace FreeSql.Tests.Extensions
|
||||||
public class LambadaExpressionExtensionsTest {
|
{
|
||||||
|
public class LambadaExpressionExtensionsTest
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void And() {
|
public void And()
|
||||||
|
{
|
||||||
Expression<Func<testExpAddOr, bool>> where = a => a.id == Guid.Empty;
|
Expression<Func<testExpAddOr, bool>> where = a => a.id == Guid.Empty;
|
||||||
|
|
||||||
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE (a.\"id\" = '00000000-0000-0000-0000-000000000000' AND a.\"num\" > 0)", g.sqlite.Select<testExpAddOr>().Where(where.And(b => b.num > 0)).ToSql().Replace("\r\n", ""));
|
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE (a.\"id\" = '00000000-0000-0000-0000-000000000000' AND a.\"num\" > 0)", g.sqlite.Select<testExpAddOr>().Where(where.And(b => b.num > 0)).ToSql().Replace("\r\n", ""));
|
||||||
@ -17,7 +20,8 @@ namespace FreeSql.Tests.Extensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Or() {
|
public void Or()
|
||||||
|
{
|
||||||
Expression<Func<testExpAddOr, bool>> where = a => a.id == Guid.Empty;
|
Expression<Func<testExpAddOr, bool>> where = a => a.id == Guid.Empty;
|
||||||
|
|
||||||
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE ((a.\"id\" = '00000000-0000-0000-0000-000000000000' OR a.\"num\" > 0))", g.sqlite.Select<testExpAddOr>().Where(where.Or(b => b.num > 0)).ToSql().Replace("\r\n", ""));
|
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE ((a.\"id\" = '00000000-0000-0000-0000-000000000000' OR a.\"num\" > 0))", g.sqlite.Select<testExpAddOr>().Where(where.Or(b => b.num > 0)).ToSql().Replace("\r\n", ""));
|
||||||
@ -27,14 +31,16 @@ namespace FreeSql.Tests.Extensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Not() {
|
public void Not()
|
||||||
|
{
|
||||||
Expression<Func<testExpAddOr, bool>> where = a => a.id == Guid.Empty;
|
Expression<Func<testExpAddOr, bool>> where = a => a.id == Guid.Empty;
|
||||||
|
|
||||||
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE (not(a.\"id\" = '00000000-0000-0000-0000-000000000000'))", g.sqlite.Select<testExpAddOr>().Where(where.Not()).ToSql().Replace("\r\n", ""));
|
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE (not(a.\"id\" = '00000000-0000-0000-0000-000000000000'))", g.sqlite.Select<testExpAddOr>().Where(where.Not()).ToSql().Replace("\r\n", ""));
|
||||||
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE (a.\"id\" = '00000000-0000-0000-0000-000000000000')", g.sqlite.Select<testExpAddOr>().Where(where.Not(false)).ToSql().Replace("\r\n", ""));
|
Assert.Equal("SELECT a.\"id\", a.\"num\" FROM \"testExpAddOr\" a WHERE (a.\"id\" = '00000000-0000-0000-0000-000000000000')", g.sqlite.Select<testExpAddOr>().Where(where.Not(false)).ToSql().Replace("\r\n", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
class testExpAddOr {
|
class testExpAddOr
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
public int num { get; set; }
|
public int num { get; set; }
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.Extensions {
|
namespace FreeSql.Tests.Extensions
|
||||||
public class StringExtensionsTest {
|
{
|
||||||
|
public class StringExtensionsTest
|
||||||
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void FormatMySql() {
|
public void FormatMySql()
|
||||||
|
{
|
||||||
|
|
||||||
Assert.Empty(((string)null).FormatMySql("11"));
|
Assert.Empty(((string)null).FormatMySql("11"));
|
||||||
Assert.Equal("a=1", "a={0}".FormatMySql(1));
|
Assert.Equal("a=1", "a={0}".FormatMySql(1));
|
||||||
@ -23,7 +26,8 @@ namespace FreeSql.Tests.Extensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void FormatSqlServer() {
|
public void FormatSqlServer()
|
||||||
|
{
|
||||||
|
|
||||||
Assert.Empty(((string)null).FormatSqlServer("11"));
|
Assert.Empty(((string)null).FormatSqlServer("11"));
|
||||||
Assert.Equal("a=1", "a={0}".FormatSqlServer(1));
|
Assert.Equal("a=1", "a={0}".FormatSqlServer(1));
|
||||||
@ -43,7 +47,8 @@ namespace FreeSql.Tests.Extensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void FormatPostgreSQL() {
|
public void FormatPostgreSQL()
|
||||||
|
{
|
||||||
|
|
||||||
Assert.Empty(((string)null).FormatPostgreSQL("11"));
|
Assert.Empty(((string)null).FormatPostgreSQL("11"));
|
||||||
Assert.Equal("a=1", "a={0}".FormatPostgreSQL(1));
|
Assert.Equal("a=1", "a={0}".FormatPostgreSQL(1));
|
||||||
|
@ -3,10 +3,12 @@ using System;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.LinqToSql {
|
namespace FreeSql.Tests.LinqToSql
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
class TestLinqToSql {
|
class TestLinqToSql
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
public string name { get; set; }
|
public string name { get; set; }
|
||||||
@ -15,7 +17,8 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
|
|
||||||
public DateTime createtime { get; set; } = DateTime.Now;
|
public DateTime createtime { get; set; } = DateTime.Now;
|
||||||
}
|
}
|
||||||
class TestLinqToSqlComment {
|
class TestLinqToSqlComment
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
public Guid TestLinqToSqlId { get; set; }
|
public Guid TestLinqToSqlId { get; set; }
|
||||||
@ -26,10 +29,12 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
public DateTime createtime { get; set; } = DateTime.Now;
|
public DateTime createtime { get; set; } = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SqliteLinqToSqlTests {
|
public class SqliteLinqToSqlTests
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
|
|
||||||
@ -41,7 +46,8 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Select() {
|
public void Select()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
|
|
||||||
@ -53,15 +59,18 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GroupBy() {
|
public void GroupBy()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
|
|
||||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||||
where a.id == item.id
|
where a.id == item.id
|
||||||
group a by new {a.id, a.name } into g
|
group a by new { a.id, a.name } into g
|
||||||
select new {
|
select new
|
||||||
g.Key.id, g.Key.name,
|
{
|
||||||
|
g.Key.id,
|
||||||
|
g.Key.name,
|
||||||
cou = g.Count(),
|
cou = g.Count(),
|
||||||
avg = g.Avg(g.Value.click),
|
avg = g.Avg(g.Value.click),
|
||||||
sum = g.Sum(g.Value.click),
|
sum = g.Sum(g.Value.click),
|
||||||
@ -73,16 +82,19 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CaseWhen() {
|
public void CaseWhen()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
|
|
||||||
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
var t1 = (from a in g.sqlite.Select<TestLinqToSql>()
|
||||||
where a.id == item.id
|
where a.id == item.id
|
||||||
select new {
|
select new
|
||||||
|
{
|
||||||
a.id,
|
a.id,
|
||||||
a.name,
|
a.name,
|
||||||
testsub = new {
|
testsub = new
|
||||||
|
{
|
||||||
time = a.click > 10 ? "´óÓÚ" : "СÓÚ»òµÈÓÚ"
|
time = a.click > 10 ? "´óÓÚ" : "СÓÚ»òµÈÓÚ"
|
||||||
}
|
}
|
||||||
}).ToList();
|
}).ToList();
|
||||||
@ -92,7 +104,8 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Join() {
|
public void Join()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
||||||
@ -121,7 +134,8 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LeftJoin() {
|
public void LeftJoin()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
||||||
@ -153,7 +167,8 @@ namespace FreeSql.Tests.LinqToSql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void From() {
|
public void From()
|
||||||
|
{
|
||||||
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
var item = new TestLinqToSql { name = Guid.NewGuid().ToString() };
|
||||||
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
g.sqlite.Insert<TestLinqToSql>().AppendData(item).ExecuteAffrows();
|
||||||
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
var comment = new TestLinqToSqlComment { TestLinqToSqlId = item.id, text = Guid.NewGuid().ToString() };
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
public class MySqlDeleteTest {
|
{
|
||||||
|
public class MySqlDeleteTest
|
||||||
|
{
|
||||||
|
|
||||||
IDelete<Topic> delete => g.mysql.Delete<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDelete<Topic> delete => g.mysql.Delete<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Dywhere() {
|
public void Dywhere()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
||||||
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).ToSql();
|
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).ToSql();
|
||||||
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
||||||
@ -36,7 +40,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql);
|
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -54,23 +59,27 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
|
|
||||||
var id = g.mysql.Insert<Topic>(new Topic { Title = "xxxx" }).ExecuteIdentity();
|
var id = g.mysql.Insert<Topic>(new Topic { Title = "xxxx" }).ExecuteIdentity();
|
||||||
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
|
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteDeleted() {
|
public void ExecuteDeleted()
|
||||||
|
{
|
||||||
|
|
||||||
//delete.Where(a => a.Id > 0).ExecuteDeleted();
|
//delete.Where(a => a.Id > 0).ExecuteDeleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
Assert.Null(g.mysql.Delete<Topic>().ToSql());
|
||||||
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "TopicAsTable").ToSql();
|
var sql = g.mysql.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "TopicAsTable").ToSql();
|
||||||
Assert.Equal("DELETE FROM `TopicAsTable` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
Assert.Equal("DELETE FROM `TopicAsTable` WHERE (`Id` = 1 OR `Id` = 2)", sql);
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
public class MySqlInsertTest {
|
{
|
||||||
|
public class MySqlInsertTest
|
||||||
|
{
|
||||||
|
|
||||||
IInsert<Topic> insert => g.mysql.Insert<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IInsert<Topic> insert => g.mysql.Insert<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -18,7 +21,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestEnumInsertTb {
|
class TestEnumInsertTb
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public TestEnumInserTbType type { get; set; }
|
public TestEnumInserTbType type { get; set; }
|
||||||
@ -27,7 +31,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
enum TestEnumInserTbType { str1, biggit, sum211 }
|
enum TestEnumInserTbType { str1, biggit, sum211 }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AppendData() {
|
public void AppendData()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
@ -51,18 +56,20 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InsertColumns() {
|
public void InsertColumns()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql();
|
var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql();
|
||||||
Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(?Title_0), (?Title_1), (?Title_2), (?Title_3), (?Title_4), (?Title_5), (?Title_6), (?Title_7), (?Title_8), (?Title_9)", sql);
|
Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(?Title_0), (?Title_1), (?Title_2), (?Title_3), (?Title_4), (?Title_5), (?Title_6), (?Title_7), (?Title_8), (?Title_9)", sql);
|
||||||
|
|
||||||
sql = insert.AppendData(items).InsertColumns(a =>new { a.Title, a.Clicks }).ToSql();
|
sql = insert.AppendData(items).InsertColumns(a => new { a.Title, a.Clicks }).ToSql();
|
||||||
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql);
|
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IgnoreColumns() {
|
public void IgnoreColumns()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
@ -73,7 +80,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(?Clicks_0), (?Clicks_1), (?Clicks_2), (?Clicks_3), (?Clicks_4), (?Clicks_5), (?Clicks_6), (?Clicks_7), (?Clicks_8), (?Clicks_9)", sql);
|
Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(?Clicks_0), (?Clicks_1), (?Clicks_2), (?Clicks_3), (?Clicks_4), (?Clicks_5), (?Clicks_6), (?Clicks_7), (?Clicks_8), (?Clicks_9)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -84,19 +92,21 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal(1, g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteAffrows());
|
Assert.Equal(1, g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteAffrows());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteIdentity() {
|
public void ExecuteIdentity()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
Assert.NotEqual(0, insert.AppendData(items.First()).ExecuteIdentity());
|
Assert.NotEqual(0, insert.AppendData(items.First()).ExecuteIdentity());
|
||||||
|
|
||||||
var id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteIdentity();
|
var id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteIdentity();
|
||||||
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select< TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
||||||
id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteIdentity();
|
id = g.mysql.Insert<TestEnumInsertTb>().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteIdentity();
|
||||||
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select<TestEnumInsertTb>().Where(a => a.id == id).First()?.type);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteInserted() {
|
public void ExecuteInserted()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
@ -104,7 +114,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
|
@ -5,14 +5,17 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
|
{
|
||||||
|
|
||||||
public class MySqlSelectTest {
|
public class MySqlSelectTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
public class Topic {
|
public class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -24,12 +27,14 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
public virtual TopicFields Fields { get; set; }
|
public virtual TopicFields Fields { get; set; }
|
||||||
}
|
}
|
||||||
public class TopicFields {
|
public class TopicFields
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public int TopicId { get; set; }
|
public int TopicId { get; set; }
|
||||||
public virtual Topic Topic { get; set; }
|
public virtual Topic Topic { get; set; }
|
||||||
}
|
}
|
||||||
public class TestTypeInfo {
|
public class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
|
|
||||||
@ -40,7 +45,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
public virtual ICollection<Topic> Topics { get; set; }
|
public virtual ICollection<Topic> Topics { get; set; }
|
||||||
}
|
}
|
||||||
public class TestTypeParentInfo {
|
public class TestTypeParentInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
@ -48,7 +54,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class Song {
|
public partial class Song
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public DateTime? Create_time { get; set; }
|
public DateTime? Create_time { get; set; }
|
||||||
@ -58,14 +65,16 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
public virtual ICollection<Tag> Tags { get; set; }
|
public virtual ICollection<Tag> Tags { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Song_tag {
|
public partial class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
public virtual Song Song { get; set; }
|
public virtual Song Song { get; set; }
|
||||||
|
|
||||||
public int Tag_id { get; set; }
|
public int Tag_id { get; set; }
|
||||||
public virtual Tag Tag { get; set; }
|
public virtual Tag Tag { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Tag {
|
public partial class Tag
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Parent_id { get; set; }
|
public int? Parent_id { get; set; }
|
||||||
@ -80,7 +89,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsSelect() {
|
public void AsSelect()
|
||||||
|
{
|
||||||
//OneToOne、ManyToOne
|
//OneToOne、ManyToOne
|
||||||
var t0 = g.mysql.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤语").ToSql();
|
var t0 = g.mysql.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤语").ToSql();
|
||||||
//SELECT a.`Id`, a.`Parent_id`, a__Parent.`Id` as3, a__Parent.`Parent_id` as4, a__Parent.`Ddd`, a__Parent.`Name`, a.`Ddd` as7, a.`Name` as8
|
//SELECT a.`Id`, a.`Parent_id`, a__Parent.`Id` as3, a__Parent.`Parent_id` as4, a__Parent.`Ddd`, a__Parent.`Name`, a.`Ddd` as7, a.`Name` as8
|
||||||
@ -113,7 +123,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Lazy() {
|
public void Lazy()
|
||||||
|
{
|
||||||
var tags = g.mysql.Select<Tag>().Where(a => a.Parent.Name == "xxx")
|
var tags = g.mysql.Select<Tag>().Where(a => a.Parent.Name == "xxx")
|
||||||
.LeftJoin(a => a.Parent_id == a.Parent.Id)
|
.LeftJoin(a => a.Parent_id == a.Parent.Id)
|
||||||
.ToSql();
|
.ToSql();
|
||||||
@ -122,7 +133,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDataTable() {
|
public void ToDataTable()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -137,13 +149,15 @@ namespace FreeSql.Tests.MySql {
|
|||||||
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
|
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestDto {
|
class TestDto
|
||||||
|
{
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string name { get; set; } //这是join表的属性
|
public string name { get; set; } //这是join表的属性
|
||||||
public int ParentId { get; set; } //这是join表的属性
|
public int ParentId { get; set; } //这是join表的属性
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToList() {
|
public void ToList()
|
||||||
|
{
|
||||||
|
|
||||||
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
||||||
var testDto2 = select.Limit(10).ToList(a => new TestDto());
|
var testDto2 = select.Limit(10).ToList(a => new TestDto());
|
||||||
@ -191,19 +205,23 @@ namespace FreeSql.Tests.MySql {
|
|||||||
.LeftJoin(a => c.Id == b.ParentId)
|
.LeftJoin(a => c.Id == b.ParentId)
|
||||||
.Where(a => b.Name != "xxx"));
|
.Where(a => b.Name != "xxx"));
|
||||||
var list111sql = list111.ToSql();
|
var list111sql = list111.ToSql();
|
||||||
var list111data = list111.ToList((a, b, c) => new {
|
var list111data = list111.ToList((a, b, c) => new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
title_substring = a.Title.Substring(0, 1),
|
title_substring = a.Title.Substring(0, 1),
|
||||||
a.Type,
|
a.Type,
|
||||||
ccc = new { a.Id, a.Title },
|
ccc = new { a.Id, a.Title },
|
||||||
tp = a.Type,
|
tp = a.Type,
|
||||||
tp2 = new {
|
tp2 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp2 = a.Type.Name
|
tp2 = a.Type.Name
|
||||||
},
|
},
|
||||||
tp3 = new {
|
tp3 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp33 = new {
|
tp33 = new
|
||||||
|
{
|
||||||
a.Id
|
a.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -211,19 +229,23 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
var ttt122 = g.mysql.Select<TestTypeParentInfo>().Where(a => a.Id > 0).ToSql();
|
var ttt122 = g.mysql.Select<TestTypeParentInfo>().Where(a => a.Id > 0).ToSql();
|
||||||
var sql5 = g.mysql.Select<TestInfo>().From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s).Where((a, b, c) => a.Id == b.ParentId).ToSql();
|
var sql5 = g.mysql.Select<TestInfo>().From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s).Where((a, b, c) => a.Id == b.ParentId).ToSql();
|
||||||
var t11112 = g.mysql.Select<TestInfo>().ToList(a => new {
|
var t11112 = g.mysql.Select<TestInfo>().ToList(a => new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
a.Title,
|
a.Title,
|
||||||
a.Type,
|
a.Type,
|
||||||
ccc = new { a.Id, a.Title },
|
ccc = new { a.Id, a.Title },
|
||||||
tp = a.Type,
|
tp = a.Type,
|
||||||
tp2 = new {
|
tp2 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp2 = a.Type.Name
|
tp2 = a.Type.Name
|
||||||
},
|
},
|
||||||
tp3 = new {
|
tp3 = new
|
||||||
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
tp33 = new {
|
tp33 = new
|
||||||
|
{
|
||||||
a.Id
|
a.Id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -245,17 +267,20 @@ namespace FreeSql.Tests.MySql {
|
|||||||
var t11 = select.Where(a => a.Type.Name.Length > 0).ToList(true);
|
var t11 = select.Where(a => a.Type.Name.Length > 0).ToList(true);
|
||||||
var t21 = select.Where(a => a.Type.Parent.Name.Length > 0).ToList(true);
|
var t21 = select.Where(a => a.Type.Parent.Name.Length > 0).ToList(true);
|
||||||
}
|
}
|
||||||
class TestGuidIdToList {
|
class TestGuidIdToList
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public string title { get; set; } = Guid.NewGuid().ToString();
|
public string title { get; set; } = Guid.NewGuid().ToString();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToOne() {
|
public void ToOne()
|
||||||
|
{
|
||||||
var testnotfind = select.Where("1=2").First(a => a.CreateTime);
|
var testnotfind = select.Where("1=2").First(a => a.CreateTime);
|
||||||
Assert.Equal(default(DateTime), testnotfind);
|
Assert.Equal(default(DateTime), testnotfind);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSql() {
|
public void ToSql()
|
||||||
|
{
|
||||||
g.mysql.Insert<testenumWhere>().AppendData(new testenumWhere { type = testenumWhereType.Blaaa }).ExecuteAffrows();
|
g.mysql.Insert<testenumWhere>().AppendData(new testenumWhere { type = testenumWhereType.Blaaa }).ExecuteAffrows();
|
||||||
|
|
||||||
var sql1 = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToSql();
|
var sql1 = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToSql();
|
||||||
@ -264,14 +289,16 @@ namespace FreeSql.Tests.MySql {
|
|||||||
var sql3 = g.mysql.Select<testenumWhere>().Where(a => a.type.Equals(testenumWhereType.Blaaa)).ToSql();
|
var sql3 = g.mysql.Select<testenumWhere>().Where(a => a.type.Equals(testenumWhereType.Blaaa)).ToSql();
|
||||||
var tolist = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToList();
|
var tolist = g.mysql.Select<testenumWhere>().Where(a => a.type == testenumWhereType.Blaaa).ToList();
|
||||||
}
|
}
|
||||||
class testenumWhere {
|
class testenumWhere
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public testenumWhereType type { get; set; }
|
public testenumWhereType type { get; set; }
|
||||||
}
|
}
|
||||||
public enum testenumWhereType { Menu, Class, Blaaa }
|
public enum testenumWhereType { Menu, Class, Blaaa }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Any() {
|
public void Any()
|
||||||
|
{
|
||||||
var count = select.Where(a => 1 == 1).Count();
|
var count = select.Where(a => 1 == 1).Count();
|
||||||
Assert.False(select.Where(a => 1 == 2).Any());
|
Assert.False(select.Where(a => 1 == 2).Any());
|
||||||
Assert.Equal(count > 0, select.Where(a => 1 == 1).Any());
|
Assert.Equal(count > 0, select.Where(a => 1 == 1).Any());
|
||||||
@ -293,18 +320,21 @@ namespace FreeSql.Tests.MySql {
|
|||||||
collectionSelect.ToList();
|
collectionSelect.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Count() {
|
public void Count()
|
||||||
|
{
|
||||||
var count = select.Where(a => 1 == 1).Count();
|
var count = select.Where(a => 1 == 1).Count();
|
||||||
select.Where(a => 1 == 1).Count(out var count2);
|
select.Where(a => 1 == 1).Count(out var count2);
|
||||||
Assert.Equal(count, count2);
|
Assert.Equal(count, count2);
|
||||||
Assert.Equal(0, select.Where(a => 1 == 2).Count());
|
Assert.Equal(0, select.Where(a => 1 == 2).Count());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Master() {
|
public void Master()
|
||||||
|
{
|
||||||
Assert.StartsWith(" SELECT", select.Master().Where(a => 1 == 1).ToSql());
|
Assert.StartsWith(" SELECT", select.Master().Where(a => 1 == 1).ToSql());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void From() {
|
public void From()
|
||||||
|
{
|
||||||
var query2 = select.From<TestTypeInfo>((s, b) => s
|
var query2 = select.From<TestTypeInfo>((s, b) => s
|
||||||
.LeftJoin(a => a.TypeGuid == b.Guid)
|
.LeftJoin(a => a.TypeGuid == b.Guid)
|
||||||
);
|
);
|
||||||
@ -321,7 +351,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
query3.ToList();
|
query3.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LeftJoin() {
|
public void LeftJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -389,7 +420,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InnerJoin() {
|
public void InnerJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -458,7 +490,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void RightJoin() {
|
public void RightJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -527,7 +560,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
|
|
||||||
var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
|
var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
|
||||||
var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
|
var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
|
||||||
@ -597,7 +631,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereIf() {
|
public void WhereIf()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.WhereIf(true, a => a.Id == 10);
|
var query = select.WhereIf(true, a => a.Id == 10);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -691,7 +726,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
var sql2222 = select.Where(a => select.Where(b => b.Id == a.Id).Any()).ToList();
|
var sql2222 = select.Where(a => select.Where(b => b.Id == a.Id).Any()).ToList();
|
||||||
|
|
||||||
sql2222 = select.Where(a =>
|
sql2222 = select.Where(a =>
|
||||||
@ -704,7 +740,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
).ToList();
|
).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GroupBy() {
|
public void GroupBy()
|
||||||
|
{
|
||||||
var groupby = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
|
var groupby = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
|
||||||
.Where(a => a.Id == 1)
|
.Where(a => a.Id == 1)
|
||||||
)
|
)
|
||||||
@ -715,7 +752,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
.OrderByDescending(a => a.Count())
|
.OrderByDescending(a => a.Count())
|
||||||
.Offset(10)
|
.Offset(10)
|
||||||
.Limit(2)
|
.Limit(2)
|
||||||
.ToList(a => new {
|
.ToList(a => new
|
||||||
|
{
|
||||||
a.Key.tt2,
|
a.Key.tt2,
|
||||||
cou1 = a.Count(),
|
cou1 = a.Count(),
|
||||||
arg1 = a.Avg(a.Key.mod4),
|
arg1 = a.Avg(a.Key.mod4),
|
||||||
@ -729,7 +767,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
var aggsql1 = select
|
var aggsql1 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -737,7 +776,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
});
|
});
|
||||||
var aggtolist1 = select
|
var aggtolist1 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToList(b => new {
|
.ToList(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -746,7 +786,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
var aggsql2 = select
|
var aggsql2 = select
|
||||||
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key.Title,
|
b.Key.Title,
|
||||||
b.Key.yyyy,
|
b.Key.yyyy,
|
||||||
|
|
||||||
@ -756,7 +797,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
});
|
});
|
||||||
var aggtolist2 = select
|
var aggtolist2 = select
|
||||||
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
||||||
.ToList(b => new {
|
.ToList(b => new
|
||||||
|
{
|
||||||
b.Key.Title,
|
b.Key.Title,
|
||||||
b.Key.yyyy,
|
b.Key.yyyy,
|
||||||
|
|
||||||
@ -767,7 +809,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
var aggsql3 = select
|
var aggsql3 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -776,24 +819,29 @@ namespace FreeSql.Tests.MySql {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToAggregate() {
|
public void ToAggregate()
|
||||||
|
{
|
||||||
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
|
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void OrderBy() {
|
public void OrderBy()
|
||||||
|
{
|
||||||
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset() {
|
public void Skip_Offset()
|
||||||
|
{
|
||||||
var sql = select.Offset(10).Limit(10).ToList();
|
var sql = select.Offset(10).Limit(10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Take_Limit() {
|
public void Take_Limit()
|
||||||
|
{
|
||||||
var sql = select.Limit(10).ToList();
|
var sql = select.Limit(10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Page() {
|
public void Page()
|
||||||
|
{
|
||||||
var sql1 = select.Page(1, 10).ToList();
|
var sql1 = select.Page(1, 10).ToList();
|
||||||
var sql2 = select.Page(2, 10).ToList();
|
var sql2 = select.Page(2, 10).ToList();
|
||||||
var sql3 = select.Page(3, 10).ToList();
|
var sql3 = select.Page(3, 10).ToList();
|
||||||
@ -803,33 +851,41 @@ namespace FreeSql.Tests.MySql {
|
|||||||
var sql33 = select.OrderBy(a => new Random().NextDouble()).Page(3, 10).ToList();
|
var sql33 = select.OrderBy(a => new Random().NextDouble()).Page(3, 10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Distinct() {
|
public void Distinct()
|
||||||
|
{
|
||||||
var t1 = select.Distinct().ToList(a => a.Title);
|
var t1 = select.Distinct().ToList(a => a.Title);
|
||||||
var t2 = select.Distinct().Limit(10).ToList(a => a.Title);
|
var t2 = select.Distinct().Limit(10).ToList(a => a.Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sum() {
|
public void Sum()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Min() {
|
public void Min()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Max() {
|
public void Max()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Avg() {
|
public void Avg()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void As() {
|
public void As()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
|
|
||||||
var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList();
|
var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList();
|
||||||
|
|
||||||
Func<Type, string, string> tableRule = (type, oldname) => {
|
Func<Type, string, string> tableRule = (type, oldname) =>
|
||||||
|
{
|
||||||
if (type == typeof(Topic)) return oldname + "AsTable1";
|
if (type == typeof(Topic)) return oldname + "AsTable1";
|
||||||
else if (type == typeof(TestTypeInfo)) return oldname + "AsTable2";
|
else if (type == typeof(TestTypeInfo)) return oldname + "AsTable2";
|
||||||
return oldname + "AsTable";
|
return oldname + "AsTable";
|
||||||
@ -891,14 +947,16 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topicAsTable1` a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?bname", sql);
|
Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topicAsTable1` a LEFT JOIN TestTypeInfo b on b.Guid = a.TypeGuid and b.Name = ?bname", sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestInclude_OneToManyModel1 {
|
public class TestInclude_OneToManyModel1
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public virtual TestInclude_OneToManyModel2 model2 { get; set; }
|
public virtual TestInclude_OneToManyModel2 model2 { get; set; }
|
||||||
|
|
||||||
public string m1name { get; set; }
|
public string m1name { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel2 {
|
public class TestInclude_OneToManyModel2
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public int model2id { get; set; }
|
public int model2id { get; set; }
|
||||||
public virtual TestInclude_OneToManyModel1 model1 { get; set; }
|
public virtual TestInclude_OneToManyModel1 model1 { get; set; }
|
||||||
@ -907,7 +965,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
public List<TestInclude_OneToManyModel3> childs { get; set; }
|
public List<TestInclude_OneToManyModel3> childs { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel3 {
|
public class TestInclude_OneToManyModel3
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
@ -916,7 +975,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
public List<TestInclude_OneToManyModel4> childs2 { get; set; }
|
public List<TestInclude_OneToManyModel4> childs2 { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel4 {
|
public class TestInclude_OneToManyModel4
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
@ -925,7 +985,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToMany() {
|
public void Include_OneToMany()
|
||||||
|
{
|
||||||
var model1 = new TestInclude_OneToManyModel1 { m1name = DateTime.Now.Second.ToString() };
|
var model1 = new TestInclude_OneToManyModel1 { m1name = DateTime.Now.Second.ToString() };
|
||||||
model1.id = (int)g.mysql.Insert(model1).ExecuteIdentity();
|
model1.id = (int)g.mysql.Insert(model1).ExecuteIdentity();
|
||||||
var model2 = new TestInclude_OneToManyModel2 { model2id = model1.id, m2setting = DateTime.Now.Second.ToString() };
|
var model2 = new TestInclude_OneToManyModel2 { model2id = model1.id, m2setting = DateTime.Now.Second.ToString() };
|
||||||
@ -980,7 +1041,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestInclude_OneToManyModel11 {
|
public class TestInclude_OneToManyModel11
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int model2id { get; set; }
|
public int model2id { get; set; }
|
||||||
@ -989,13 +1051,15 @@ namespace FreeSql.Tests.MySql {
|
|||||||
public string m1name { get; set; }
|
public string m1name { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestInclude_OneToManyModel22 {
|
public class TestInclude_OneToManyModel22
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string m2setting { get; set; }
|
public string m2setting { get; set; }
|
||||||
public List<TestInclude_OneToManyModel33> childs { get; set; }
|
public List<TestInclude_OneToManyModel33> childs { get; set; }
|
||||||
}
|
}
|
||||||
public class TestInclude_OneToManyModel33 {
|
public class TestInclude_OneToManyModel33
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int model2Id { get; set; }
|
public int model2Id { get; set; }
|
||||||
@ -1003,7 +1067,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
public string setting { get; set; }
|
public string setting { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToMany2() {
|
public void Include_OneToMany2()
|
||||||
|
{
|
||||||
string setting = "x";
|
string setting = "x";
|
||||||
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
|
var model2 = new TestInclude_OneToManyModel22 { m2setting = DateTime.Now.Second.ToString() };
|
||||||
model2.id = (int)g.mysql.Insert(model2).ExecuteIdentity();
|
model2.id = (int)g.mysql.Insert(model2).ExecuteIdentity();
|
||||||
@ -1033,37 +1098,44 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToChilds() {
|
public void Include_OneToChilds()
|
||||||
var tag1 = new Tag {
|
{
|
||||||
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_中国"
|
Name = "test_oneToChilds_01_中国"
|
||||||
};
|
};
|
||||||
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
||||||
var tag1_1 = new Tag {
|
var tag1_1 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag1.Id,
|
Parent_id = tag1.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_北京"
|
Name = "test_oneToChilds_01_北京"
|
||||||
};
|
};
|
||||||
tag1_1.Id = (int)g.mysql.Insert(tag1_1).ExecuteIdentity();
|
tag1_1.Id = (int)g.mysql.Insert(tag1_1).ExecuteIdentity();
|
||||||
var tag1_2 = new Tag {
|
var tag1_2 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag1.Id,
|
Parent_id = tag1.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_上海"
|
Name = "test_oneToChilds_01_上海"
|
||||||
};
|
};
|
||||||
tag1_2.Id = (int)g.mysql.Insert(tag1_2).ExecuteIdentity();
|
tag1_2.Id = (int)g.mysql.Insert(tag1_2).ExecuteIdentity();
|
||||||
|
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_美国"
|
Name = "test_oneToChilds_02_美国"
|
||||||
};
|
};
|
||||||
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
||||||
var tag2_1 = new Tag {
|
var tag2_1 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag2.Id,
|
Parent_id = tag2.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_纽约"
|
Name = "test_oneToChilds_02_纽约"
|
||||||
};
|
};
|
||||||
tag2_1.Id = (int)g.mysql.Insert(tag2_1).ExecuteIdentity();
|
tag2_1.Id = (int)g.mysql.Insert(tag2_1).ExecuteIdentity();
|
||||||
var tag2_2 = new Tag {
|
var tag2_2 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag2.Id,
|
Parent_id = tag2.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_华盛顿"
|
Name = "test_oneToChilds_02_华盛顿"
|
||||||
@ -1123,37 +1195,44 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_ManyToMany() {
|
public void Include_ManyToMany()
|
||||||
|
{
|
||||||
|
|
||||||
var tag1 = new Tag {
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_01_中国"
|
Name = "test_manytoMany_01_中国"
|
||||||
};
|
};
|
||||||
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
tag1.Id = (int)g.mysql.Insert(tag1).ExecuteIdentity();
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_02_美国"
|
Name = "test_manytoMany_02_美国"
|
||||||
};
|
};
|
||||||
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
tag2.Id = (int)g.mysql.Insert(tag2).ExecuteIdentity();
|
||||||
var tag3 = new Tag {
|
var tag3 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_03_日本"
|
Name = "test_manytoMany_03_日本"
|
||||||
};
|
};
|
||||||
tag3.Id = (int)g.mysql.Insert(tag3).ExecuteIdentity();
|
tag3.Id = (int)g.mysql.Insert(tag3).ExecuteIdentity();
|
||||||
|
|
||||||
var song1 = new Song {
|
var song1 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_01_我是中国人.mp3",
|
Title = "test_manytoMany_01_我是中国人.mp3",
|
||||||
Url = "http://ww.baidu.com/"
|
Url = "http://ww.baidu.com/"
|
||||||
};
|
};
|
||||||
song1.Id = (int)g.mysql.Insert(song1).ExecuteIdentity();
|
song1.Id = (int)g.mysql.Insert(song1).ExecuteIdentity();
|
||||||
var song2 = new Song {
|
var song2 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_02_爱你一万年.mp3",
|
Title = "test_manytoMany_02_爱你一万年.mp3",
|
||||||
Url = "http://ww.163.com/"
|
Url = "http://ww.163.com/"
|
||||||
};
|
};
|
||||||
song2.Id = (int)g.mysql.Insert(song2).ExecuteIdentity();
|
song2.Id = (int)g.mysql.Insert(song2).ExecuteIdentity();
|
||||||
var song3 = new Song {
|
var song3 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_03_千年等一回.mp3",
|
Title = "test_manytoMany_03_千年等一回.mp3",
|
||||||
Url = "http://ww.sina.com/"
|
Url = "http://ww.sina.com/"
|
||||||
|
@ -3,12 +3,15 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
public class MySqlUpdateTest {
|
{
|
||||||
|
public class MySqlUpdateTest
|
||||||
|
{
|
||||||
IUpdate<Topic> update => g.mysql.Update<Topic>();
|
IUpdate<Topic> update => g.mysql.Update<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Clicks { get; set; }
|
public int? Clicks { get; set; }
|
||||||
@ -16,7 +19,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestEnumUpdateTb {
|
class TestEnumUpdateTb
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public TestEnumUpdateTbType type { get; set; }
|
public TestEnumUpdateTbType type { get; set; }
|
||||||
@ -25,7 +29,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
enum TestEnumUpdateTbType { str1, biggit, sum211 }
|
enum TestEnumUpdateTbType { str1, biggit, sum211 }
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Dywhere() {
|
public void Dywhere()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topic` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
|
Assert.Equal("UPDATE `tb_topic` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topic` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
|
Assert.Equal("UPDATE `tb_topic` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
|
||||||
@ -34,7 +39,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SetSource() {
|
public void SetSource()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Clicks` = ?p_0, `Title` = ?p_1, `CreateTime` = ?p_2 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Clicks` = ?p_0, `Title` = ?p_1, `CreateTime` = ?p_2 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -47,7 +53,7 @@ namespace FreeSql.Tests.MySql {
|
|||||||
sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = CASE `Id` WHEN 1 THEN ?p_0 WHEN 2 THEN ?p_1 WHEN 3 THEN ?p_2 WHEN 4 THEN ?p_3 WHEN 5 THEN ?p_4 WHEN 6 THEN ?p_5 WHEN 7 THEN ?p_6 WHEN 8 THEN ?p_7 WHEN 9 THEN ?p_8 WHEN 10 THEN ?p_9 END WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = CASE `Id` WHEN 1 THEN ?p_0 WHEN 2 THEN ?p_1 WHEN 3 THEN ?p_2 WHEN 4 THEN ?p_3 WHEN 5 THEN ?p_4 WHEN 6 THEN ?p_5 WHEN 7 THEN ?p_6 WHEN 8 THEN ?p_7 WHEN 9 THEN ?p_8 WHEN 10 THEN ?p_9 END WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
|
|
||||||
sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020,1,1)).ToSql().Replace("\r\n", "");
|
sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `CreateTime` = ?p_0 WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `CreateTime` = ?p_0 WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
|
|
||||||
sql = g.mysql.Insert<TestEnumUpdateTb>().AppendData(new TestEnumUpdateTb { type = TestEnumUpdateTbType.sum211 }).ToSql().Replace("\r\n", "");
|
sql = g.mysql.Insert<TestEnumUpdateTb>().AppendData(new TestEnumUpdateTb { type = TestEnumUpdateTbType.sum211 }).ToSql().Replace("\r\n", "");
|
||||||
@ -73,7 +79,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IgnoreColumns() {
|
public void IgnoreColumns()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = ?p_0 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = ?p_0 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -84,7 +91,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UpdateColumns() {
|
public void UpdateColumns()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).UpdateColumns(a => a.Title).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).UpdateColumns(a => a.Title).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = ?p_0 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = ?p_0 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -95,7 +103,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Set() {
|
public void Set()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET `Title` = ?p_0 WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET `Title` = ?p_0 WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -134,7 +143,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal(TestEnumUpdateTbType.str1, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
Assert.Equal(TestEnumUpdateTbType.str1, g.mysql.Select<TestEnumUpdateTb>().Where(a => a.id == id).First()?.type);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SetRaw() {
|
public void SetRaw()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + ?incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + ?incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET clicks = clicks + ?incrClick WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET clicks = clicks + ?incrClick WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -142,7 +152,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE `tb_topic` SET title='newtitle' WHERE (`Id` = 1)", sql);
|
Assert.Equal("UPDATE `tb_topic` SET title='newtitle' WHERE (`Id` = 1)", sql);
|
||||||
|
|
||||||
@ -163,20 +174,24 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0 AND `type` = 'str1')", sql);
|
Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211' WHERE (`id` = 0 AND `type` = 'str1')", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteUpdated() {
|
public void ExecuteUpdated()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
Assert.Null(g.mysql.Update<Topic>().ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").AsTable(a => "tb_topicAsTable").ToSql());
|
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test' \r\nWHERE (`Id` = 1 OR `Id` = 2)", g.mysql.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").AsTable(a => "tb_topicAsTable").ToSql());
|
||||||
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").AsTable(a => "tb_topicAsTable").ToSql());
|
Assert.Equal("UPDATE `tb_topicAsTable` SET title='test1' \r\nWHERE (`Id` = 1)", g.mysql.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").AsTable(a => "tb_topicAsTable").ToSql());
|
||||||
|
@ -2,9 +2,12 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlMapType {
|
namespace FreeSql.Tests.MySqlMapType
|
||||||
public class BoolNullableTest {
|
{
|
||||||
class BoolNullableMap {
|
public class BoolNullableTest
|
||||||
|
{
|
||||||
|
class BoolNullableMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(MapType = typeof(bool))]
|
[Column(MapType = typeof(bool))]
|
||||||
public bool? tobool { get; set; } = true;
|
public bool? tobool { get; set; } = true;
|
||||||
@ -57,7 +60,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
public bool? tostring { get; set; } = true;
|
public bool? tostring { get; set; } = true;
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Bool() {
|
public void Bool()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -138,7 +142,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -219,7 +224,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByteNullable() {
|
public void SByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -300,7 +306,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -381,7 +388,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ShortNullable() {
|
public void ShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -462,7 +470,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -543,7 +552,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IntNullable() {
|
public void IntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -624,7 +634,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -705,7 +716,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LongNullable() {
|
public void LongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -787,7 +799,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -868,7 +881,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteNullable() {
|
public void ByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -949,7 +963,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1030,7 +1045,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShortNullable() {
|
public void UShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1111,7 +1127,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1192,7 +1209,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UIntNullable() {
|
public void UIntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1273,7 +1291,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1354,7 +1373,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULongNullable() {
|
public void ULongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1436,23 +1456,29 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan() {
|
public void TimeSpan()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime() {
|
public void DateTime()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteArray() {
|
public void ByteArray()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void String() {
|
public void String()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1534,29 +1560,37 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid() {
|
public void Guid()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPoint() {
|
public void MygisPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisLineString() {
|
public void MygisLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPolygon() {
|
public void MygisPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPoint() {
|
public void MygisMultiPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiLineString() {
|
public void MygisMultiLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPolygon() {
|
public void MygisMultiPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,13 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlMapType {
|
namespace FreeSql.Tests.MySqlMapType
|
||||||
public class BoolTest {
|
{
|
||||||
|
public class BoolTest
|
||||||
|
{
|
||||||
|
|
||||||
class BoolMap {
|
class BoolMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(MapType = typeof(bool?))]
|
[Column(MapType = typeof(bool?))]
|
||||||
public bool toboolnullable { get; set; } = true;
|
public bool toboolnullable { get; set; } = true;
|
||||||
@ -59,7 +62,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BoolNullable() {
|
public void BoolNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -114,7 +118,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -169,7 +174,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByteNullable() {
|
public void SByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -224,7 +230,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -279,7 +286,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ShortNullable() {
|
public void ShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -334,7 +342,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -389,7 +398,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IntNullable() {
|
public void IntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -444,7 +454,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -499,7 +510,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LongNullable() {
|
public void LongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -555,7 +567,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -610,7 +623,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteNullable() {
|
public void ByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -665,7 +679,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -720,7 +735,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShortNullable() {
|
public void UShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -775,7 +791,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -830,7 +847,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UIntNullable() {
|
public void UIntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -885,7 +903,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -940,7 +959,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULongNullable() {
|
public void ULongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -996,23 +1016,29 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan() {
|
public void TimeSpan()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime() {
|
public void DateTime()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteArray() {
|
public void ByteArray()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void String() {
|
public void String()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -1068,29 +1094,37 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid() {
|
public void Guid()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPoint() {
|
public void MygisPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisLineString() {
|
public void MygisLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPolygon() {
|
public void MygisPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPoint() {
|
public void MygisMultiPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiLineString() {
|
public void MygisMultiLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPolygon() {
|
public void MygisMultiPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,12 @@ using System;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlMapType {
|
namespace FreeSql.Tests.MySqlMapType
|
||||||
public class EnumTest {
|
{
|
||||||
class EnumTestMap {
|
public class EnumTest
|
||||||
|
{
|
||||||
|
class EnumTestMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(MapType = typeof(string))]
|
[Column(MapType = typeof(string))]
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumToString() {
|
public void EnumToString()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -76,7 +80,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullableToString() {
|
public void EnumNullableToString()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -136,7 +141,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumToInt() {
|
public void EnumToInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -192,7 +198,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullableToInt() {
|
public void EnumNullableToInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
|
@ -3,9 +3,12 @@ using System;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlMapType {
|
namespace FreeSql.Tests.MySqlMapType
|
||||||
public class ToStringTest {
|
{
|
||||||
class ToStringMap {
|
public class ToStringTest
|
||||||
|
{
|
||||||
|
class ToStringMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(MapType = typeof(string))]
|
[Column(MapType = typeof(string))]
|
||||||
@ -35,7 +38,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Enum1() {
|
public void Enum1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -91,7 +95,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullable() {
|
public void EnumNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -150,7 +155,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BigInteger1() {
|
public void BigInteger1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -206,7 +212,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BigIntegerNullable() {
|
public void BigIntegerNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -265,7 +272,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan1() {
|
public void TimeSpan1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -305,7 +313,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -359,7 +368,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime1() {
|
public void DateTime1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -399,7 +409,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -454,7 +465,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid1() {
|
public void Guid1()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
@ -497,7 +509,8 @@ namespace FreeSql.Tests.MySqlMapType {
|
|||||||
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<ToStringMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.mysql;
|
var orm = g.mysql;
|
||||||
var item = new ToStringMap { };
|
var item = new ToStringMap { };
|
||||||
|
@ -2,37 +2,46 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
public class MySqlAdoTest {
|
{
|
||||||
|
public class MySqlAdoTest
|
||||||
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Pool() {
|
public void Pool()
|
||||||
|
{
|
||||||
var t1 = g.mysql.Ado.MasterPool.StatisticsFullily;
|
var t1 = g.mysql.Ado.MasterPool.StatisticsFullily;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SlavePools() {
|
public void SlavePools()
|
||||||
|
{
|
||||||
var t2 = g.mysql.Ado.SlavePools.Count;
|
var t2 = g.mysql.Ado.SlavePools.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteReader() {
|
public void ExecuteReader()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteArray() {
|
public void ExecuteArray()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteNonQuery() {
|
public void ExecuteNonQuery()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteScalar() {
|
public void ExecuteScalar()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Query() {
|
public void Query()
|
||||||
|
{
|
||||||
var t3 = g.mysql.Ado.Query<xxx>("select * from song");
|
var t3 = g.mysql.Ado.Query<xxx>("select * from song");
|
||||||
|
|
||||||
var t4 = g.mysql.Ado.Query<(int, string, string)>("select * from song");
|
var t4 = g.mysql.Ado.Query<(int, string, string)>("select * from song");
|
||||||
@ -41,11 +50,13 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void QueryMultipline() {
|
public void QueryMultipline()
|
||||||
|
{
|
||||||
var t3 = g.mysql.Ado.Query<xxx, (int, string, string), dynamic>("select * from song; select * from song; select * from song");
|
var t3 = g.mysql.Ado.Query<xxx, (int, string, string), dynamic>("select * from song; select * from song; select * from song");
|
||||||
}
|
}
|
||||||
|
|
||||||
class xxx {
|
class xxx
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
public string Title2 { get; set; }
|
public string Title2 { get; set; }
|
||||||
|
@ -6,15 +6,19 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
public class MySqlCodeFirstTest {
|
{
|
||||||
|
public class MySqlCodeFirstTest
|
||||||
|
{
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void 中文表_字段() {
|
public void 中文表_字段()
|
||||||
|
{
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<测试中文表2>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<测试中文表2>();
|
||||||
g.mysql.CodeFirst.SyncStructure<测试中文表2>();
|
g.mysql.CodeFirst.SyncStructure<测试中文表2>();
|
||||||
|
|
||||||
var item = new 测试中文表2 {
|
var item = new 测试中文表2
|
||||||
|
{
|
||||||
标题 = "测试标题",
|
标题 = "测试标题",
|
||||||
创建时间 = DateTime.Now
|
创建时间 = DateTime.Now
|
||||||
};
|
};
|
||||||
@ -25,7 +29,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
Assert.Equal(item.编号, item2.编号);
|
Assert.Equal(item.编号, item2.编号);
|
||||||
Assert.Equal(item.标题, item2.标题);
|
Assert.Equal(item.标题, item2.标题);
|
||||||
}
|
}
|
||||||
class 测试中文表2 {
|
class 测试中文表2
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public Guid 编号 { get; set; }
|
public Guid 编号 { get; set; }
|
||||||
|
|
||||||
@ -35,12 +40,14 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddUniques() {
|
public void AddUniques()
|
||||||
|
{
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
|
||||||
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
|
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
|
||||||
}
|
}
|
||||||
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
|
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
|
||||||
class AddUniquesInfo {
|
class AddUniquesInfo
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(Unique = "uk_phone")]
|
[Column(Unique = "uk_phone")]
|
||||||
public string phone { get; set; }
|
public string phone { get; set; }
|
||||||
@ -54,14 +61,16 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddField() {
|
public void AddField()
|
||||||
|
{
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
|
||||||
|
|
||||||
var id = g.mysql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
|
var id = g.mysql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "TopicAddField", OldName = "xxxtb.TopicAddField")]
|
[Table(Name = "TopicAddField", OldName = "xxxtb.TopicAddField")]
|
||||||
public class TopicAddField {
|
public class TopicAddField
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int? Id { get; set; }
|
public int? Id { get; set; }
|
||||||
|
|
||||||
@ -75,10 +84,12 @@ namespace FreeSql.Tests.MySql {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetComparisonDDLStatements() {
|
public void GetComparisonDDLStatements()
|
||||||
|
{
|
||||||
|
|
||||||
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
|
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
|
||||||
if (string.IsNullOrEmpty(sql) == false) {
|
if (string.IsNullOrEmpty(sql) == false)
|
||||||
|
{
|
||||||
Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` (
|
Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` (
|
||||||
`Id` INT(11) NOT NULL AUTO_INCREMENT,
|
`Id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
`testFieldBool` BIT(1) NOT NULL,
|
`testFieldBool` BIT(1) NOT NULL,
|
||||||
@ -135,13 +146,15 @@ namespace FreeSql.Tests.MySql {
|
|||||||
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CurdAllField() {
|
public void CurdAllField()
|
||||||
|
{
|
||||||
var item = new TableAllType { };
|
var item = new TableAllType { };
|
||||||
item.Id = (int)insert.AppendData(item).ExecuteIdentity();
|
item.Id = (int)insert.AppendData(item).ExecuteIdentity();
|
||||||
|
|
||||||
var newitem = select.Where(a => a.Id == item.Id).ToOne();
|
var newitem = select.Where(a => a.Id == item.Id).ToOne();
|
||||||
|
|
||||||
var item2 = new TableAllType {
|
var item2 = new TableAllType
|
||||||
|
{
|
||||||
testFieldBool = true,
|
testFieldBool = true,
|
||||||
testFieldBoolNullable = true,
|
testFieldBoolNullable = true,
|
||||||
testFieldByte = 255,
|
testFieldByte = 255,
|
||||||
@ -209,7 +222,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
|
|
||||||
[JsonObject(MemberSerialization.OptIn), Table(Name = "tb_alltype")]
|
[JsonObject(MemberSerialization.OptIn), Table(Name = "tb_alltype")]
|
||||||
public partial class Tb_alltype {
|
public partial class Tb_alltype
|
||||||
|
{
|
||||||
|
|
||||||
[JsonProperty, Column(Name = "Id", DbType = "int(11)", IsPrimary = true, IsIdentity = true)]
|
[JsonProperty, Column(Name = "Id", DbType = "int(11)", IsPrimary = true, IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
@ -385,7 +399,8 @@ namespace FreeSql.Tests.MySql {
|
|||||||
internal static IFreeSql mysql => null;
|
internal static IFreeSql mysql => null;
|
||||||
public static FreeSql.ISelect<Tb_alltype> Select => mysql.Select<Tb_alltype>();
|
public static FreeSql.ISelect<Tb_alltype> Select => mysql.Select<Tb_alltype>();
|
||||||
|
|
||||||
public static long Delete(int Id) {
|
public static long Delete(int Id)
|
||||||
|
{
|
||||||
var affrows = mysql.Delete<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
var affrows = mysql.Delete<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
@ -393,8 +408,10 @@ namespace FreeSql.Tests.MySql {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
|
/// 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Save() {
|
public void Save()
|
||||||
if (this.Id != default(int)) {
|
{
|
||||||
|
if (this.Id != default(int))
|
||||||
|
{
|
||||||
var affrows = mysql.Update<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
var affrows = mysql.Update<Tb_alltype>().Where(a => a.Id == Id).ExecuteAffrows();
|
||||||
if (affrows > 0) return;
|
if (affrows > 0) return;
|
||||||
}
|
}
|
||||||
@ -403,24 +420,29 @@ namespace FreeSql.Tests.MySql {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Tb_alltypeTESTFIELDENUM1 {
|
public enum Tb_alltypeTESTFIELDENUM1
|
||||||
|
{
|
||||||
E1 = 1, E2, E3, E5
|
E1 = 1, E2, E3, E5
|
||||||
}
|
}
|
||||||
public enum Tb_alltypeTESTFIELDENUM1NULLABLE {
|
public enum Tb_alltypeTESTFIELDENUM1NULLABLE
|
||||||
|
{
|
||||||
E1 = 1, E2, E3, E5
|
E1 = 1, E2, E3, E5
|
||||||
}
|
}
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum Tb_alltypeTESTFIELDENUM2 : long {
|
public enum Tb_alltypeTESTFIELDENUM2 : long
|
||||||
|
{
|
||||||
F1 = 1, F2 = 2, F3 = 4
|
F1 = 1, F2 = 2, F3 = 4
|
||||||
}
|
}
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum Tb_alltypeTESTFIELDENUM2NULLABLE : long {
|
public enum Tb_alltypeTESTFIELDENUM2NULLABLE : long
|
||||||
|
{
|
||||||
F1 = 1, F2 = 2, F3 = 4
|
F1 = 1, F2 = 2, F3 = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
class TableAllType {
|
class TableAllType
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
@ -2,17 +2,21 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySql {
|
namespace FreeSql.Tests.MySql
|
||||||
public class MySqlDbFirstTest {
|
{
|
||||||
|
public class MySqlDbFirstTest
|
||||||
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases() {
|
public void GetDatabases()
|
||||||
|
{
|
||||||
|
|
||||||
var t1 = g.mysql.DbFirst.GetDatabases();
|
var t1 = g.mysql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase() {
|
public void GetTablesByDatabase()
|
||||||
|
{
|
||||||
|
|
||||||
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
||||||
|
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlExpression {
|
namespace FreeSql.Tests.MySqlExpression
|
||||||
public class ConvertTest {
|
{
|
||||||
|
public class ConvertTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,13 +22,15 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -33,111 +38,129 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToBoolean() {
|
public void ToBoolean()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (Convert.ToBoolean(a.Clicks) ? 1 : 0) > 0).ToList());
|
data.Add(select.Where(a => (Convert.ToBoolean(a.Clicks) ? 1 : 0) > 0).ToList());
|
||||||
data.Add(select.Where(a => (bool.Parse(a.Clicks.ToString()) ? 1 : 0) > 0).ToList());
|
data.Add(select.Where(a => (bool.Parse(a.Clicks.ToString()) ? 1 : 0) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToByte() {
|
public void ToByte()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToByte(a.Clicks % 255) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToByte(a.Clicks % 255) > 0).ToList());
|
||||||
data.Add(select.Where(a => byte.Parse((a.Clicks % 255).ToString()) > 0).ToList());
|
data.Add(select.Where(a => byte.Parse((a.Clicks % 255).ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToChar() {
|
public void ToChar()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToChar(a.Clicks) == '1').ToList());
|
data.Add(select.Where(a => Convert.ToChar(a.Clicks) == '1').ToList());
|
||||||
data.Add(select.Where(a => char.Parse(a.Clicks.ToString()) == '1').ToList());
|
data.Add(select.Where(a => char.Parse(a.Clicks.ToString()) == '1').ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDateTime() {
|
public void ToDateTime()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToDateTime(a.CreateTime.ToString()).Year > 0).ToList());
|
data.Add(select.Where(a => Convert.ToDateTime(a.CreateTime.ToString()).Year > 0).ToList());
|
||||||
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()).Year > 0).ToList());
|
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()).Year > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDecimal() {
|
public void ToDecimal()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToDecimal(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToDecimal(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => decimal.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => decimal.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDouble() {
|
public void ToDouble()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToDouble(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToDouble(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => double.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => double.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToInt16() {
|
public void ToInt16()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToInt16(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToInt16(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => short.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => short.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToInt32() {
|
public void ToInt32()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (int)a.Clicks > 0).ToList());
|
data.Add(select.Where(a => (int)a.Clicks > 0).ToList());
|
||||||
data.Add(select.Where(a => Convert.ToInt32(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToInt32(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => int.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => int.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToInt64() {
|
public void ToInt64()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToInt64(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToInt64(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => long.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => long.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSByte() {
|
public void ToSByte()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToSByte(a.Clicks % 128) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToSByte(a.Clicks % 128) > 0).ToList());
|
||||||
data.Add(select.Where(a => sbyte.Parse((a.Clicks % 128).ToString()) > 0).ToList());
|
data.Add(select.Where(a => sbyte.Parse((a.Clicks % 128).ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSingle() {
|
public void ToSingle()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToSingle(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToSingle(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => float.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => float.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_ToString() {
|
public void this_ToString()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToString(a.Clicks).Equals("")).ToList());
|
data.Add(select.Where(a => Convert.ToString(a.Clicks).Equals("")).ToList());
|
||||||
data.Add(select.Where(a => a.Clicks.ToString().Equals("")).ToList());
|
data.Add(select.Where(a => a.Clicks.ToString().Equals("")).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUInt16() {
|
public void ToUInt16()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToUInt16(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToUInt16(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => ushort.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => ushort.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUInt32() {
|
public void ToUInt32()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToUInt32(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToUInt32(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => uint.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => uint.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUInt64() {
|
public void ToUInt64()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Convert.ToUInt64(a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Convert.ToUInt64(a.Clicks) > 0).ToList());
|
||||||
data.Add(select.Where(a => ulong.Parse(a.Clicks.ToString()) > 0).ToList());
|
data.Add(select.Where(a => ulong.Parse(a.Clicks.ToString()) > 0).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid_Parse() {
|
public void Guid_Parse()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Guid.Parse(Guid.Empty.ToString()) == Guid.Empty).ToList());
|
data.Add(select.Where(a => Guid.Parse(Guid.Empty.ToString()) == Guid.Empty).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid_NewGuid() {
|
public void Guid_NewGuid()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
//data.Add(select.OrderBy(a => Guid.NewGuid()).Limit(10).ToList());
|
//data.Add(select.OrderBy(a => Guid.NewGuid()).Limit(10).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Random() {
|
public void Random()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => new Random().Next() > a.Clicks).Limit(10).ToList());
|
data.Add(select.Where(a => new Random().Next() > a.Clicks).Limit(10).ToList());
|
||||||
data.Add(select.Where(a => new Random().NextDouble() > a.Clicks).Limit(10).ToList());
|
data.Add(select.Where(a => new Random().NextDouble() > a.Clicks).Limit(10).ToList());
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlExpression {
|
namespace FreeSql.Tests.MySqlExpression
|
||||||
public class DateTimeTest {
|
{
|
||||||
|
public class DateTimeTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic111333")]
|
[Table(Name = "tb_topic111333")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
[Table(Name = "TestTypeInfo333")]
|
[Table(Name = "TestTypeInfo333")]
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
@ -29,7 +33,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public DateTime Time { get; set; }
|
public DateTime Time { get; set; }
|
||||||
}
|
}
|
||||||
[Table(Name = "TestTypeParentInfo23123")]
|
[Table(Name = "TestTypeParentInfo23123")]
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -37,7 +42,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public DateTime Time2 { get; set; }
|
public DateTime Time2 { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Now() {
|
public void Now()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -45,7 +51,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(now(), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(now(), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UtcNow() {
|
public void UtcNow()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.UtcNow.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.UtcNow.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -53,7 +60,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(utc_timestamp(), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(utc_timestamp(), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MinValue() {
|
public void MinValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MinValue.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MinValue.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -61,7 +69,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('0001/1/1 0:00:00' as datetime), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('0001/1/1 0:00:00' as datetime), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MaxValue() {
|
public void MaxValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MaxValue.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.MaxValue.Date).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -69,7 +78,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('9999/12/31 23:59:59' as datetime), '%Y-%m-%d') as datetime))
|
//WHERE (cast(date_format(a.`CreateTime`, '%Y-%m-%d') as datetime) = cast(date_format(cast('9999/12/31 23:59:59' as datetime), '%Y-%m-%d') as datetime))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Date() {
|
public void Date()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
data.Add(select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Date > DateTime.Now.Date).ToList());
|
data.Add(select.Where(a => a.Type.Time.Date > DateTime.Now.Date).ToList());
|
||||||
@ -101,7 +111,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, cast(date_format(a__Type__Parent.`Time2`, '%Y-%m-%d') as datetime), now())) / 1000000) > 0)
|
//WHERE (((timestampdiff(microsecond, cast(date_format(a__Type__Parent.`Time2`, '%Y-%m-%d') as datetime), now())) / 1000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeOfDay() {
|
public void TimeOfDay()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay == DateTime.Now.TimeOfDay).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay == DateTime.Now.TimeOfDay).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.TimeOfDay > DateTime.Now.TimeOfDay).ToList());
|
data.Add(select.Where(a => a.Type.Time.TimeOfDay > DateTime.Now.TimeOfDay).ToList());
|
||||||
@ -119,7 +130,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a__Type__Parent.`Time2`, '1970-1-1 %H:%i:%s.%f'), a__Type__Parent.`Time2`) + 62135596800000000) > (timestampdiff(microsecond, date_format(now(), '1970-1-1 %H:%i:%s.%f'), now()) + 62135596800000000))
|
//WHERE ((timestampdiff(microsecond, date_format(a__Type__Parent.`Time2`, '1970-1-1 %H:%i:%s.%f'), a__Type__Parent.`Time2`) + 62135596800000000) > (timestampdiff(microsecond, date_format(now(), '1970-1-1 %H:%i:%s.%f'), now()) + 62135596800000000))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DayOfWeek() {
|
public void DayOfWeek()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
data.Add(select.Where(a => a.CreateTime.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
data.Add(select.Where(a => a.Type.Time.DayOfWeek > DateTime.Now.DayOfWeek).ToList());
|
||||||
@ -137,7 +149,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((dayofweek(a__Type__Parent.`Time2`) - 1) > (dayofweek(now()) - 1))
|
//WHERE ((dayofweek(a__Type__Parent.`Time2`) - 1) > (dayofweek(now()) - 1))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Day() {
|
public void Day()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Day > DateTime.Now.Day).ToList());
|
data.Add(select.Where(a => a.CreateTime.Day > DateTime.Now.Day).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Day > DateTime.Now.Day).ToList());
|
data.Add(select.Where(a => a.Type.Time.Day > DateTime.Now.Day).ToList());
|
||||||
@ -155,7 +168,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (dayofmonth(a__Type__Parent.`Time2`) > dayofmonth(now()))
|
//WHERE (dayofmonth(a__Type__Parent.`Time2`) > dayofmonth(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DayOfYear() {
|
public void DayOfYear()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
data.Add(select.Where(a => a.CreateTime.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
data.Add(select.Where(a => a.Type.Time.DayOfYear > DateTime.Now.DayOfYear).ToList());
|
||||||
@ -173,7 +187,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (dayofyear(a__Type__Parent.`Time2`) > dayofyear(now()))
|
//WHERE (dayofyear(a__Type__Parent.`Time2`) > dayofyear(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Month() {
|
public void Month()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Month > DateTime.Now.Month).ToList());
|
data.Add(select.Where(a => a.CreateTime.Month > DateTime.Now.Month).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Month > DateTime.Now.Month).ToList());
|
data.Add(select.Where(a => a.Type.Time.Month > DateTime.Now.Month).ToList());
|
||||||
@ -191,7 +206,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (month(a__Type__Parent.`Time2`) > month(now()))
|
//WHERE (month(a__Type__Parent.`Time2`) > month(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Year() {
|
public void Year()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Year > DateTime.Now.Year).ToList());
|
data.Add(select.Where(a => a.CreateTime.Year > DateTime.Now.Year).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Year > DateTime.Now.Year).ToList());
|
data.Add(select.Where(a => a.Type.Time.Year > DateTime.Now.Year).ToList());
|
||||||
@ -209,7 +225,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (year(a__Type__Parent.`Time2`) > year(now()))
|
//WHERE (year(a__Type__Parent.`Time2`) > year(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Hour() {
|
public void Hour()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Hour > DateTime.Now.Hour).ToList());
|
data.Add(select.Where(a => a.CreateTime.Hour > DateTime.Now.Hour).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Hour > DateTime.Now.Hour).ToList());
|
data.Add(select.Where(a => a.Type.Time.Hour > DateTime.Now.Hour).ToList());
|
||||||
@ -227,7 +244,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (hour(a__Type__Parent.`Time2`) > hour(now()))
|
//WHERE (hour(a__Type__Parent.`Time2`) > hour(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Minute() {
|
public void Minute()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Minute > DateTime.Now.Minute).ToList());
|
data.Add(select.Where(a => a.CreateTime.Minute > DateTime.Now.Minute).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Minute > DateTime.Now.Minute).ToList());
|
data.Add(select.Where(a => a.Type.Time.Minute > DateTime.Now.Minute).ToList());
|
||||||
@ -245,7 +263,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (minute(a__Type__Parent.`Time2`) > minute(now()))
|
//WHERE (minute(a__Type__Parent.`Time2`) > minute(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Second() {
|
public void Second()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Second > DateTime.Now.Second).ToList());
|
data.Add(select.Where(a => a.CreateTime.Second > DateTime.Now.Second).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Second > DateTime.Now.Second).ToList());
|
data.Add(select.Where(a => a.Type.Time.Second > DateTime.Now.Second).ToList());
|
||||||
@ -263,7 +282,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (second(a__Type__Parent.`Time2`) > second(now()))
|
//WHERE (second(a__Type__Parent.`Time2`) > second(now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Millisecond() {
|
public void Millisecond()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Millisecond > DateTime.Now.Millisecond).ToList());
|
data.Add(select.Where(a => a.CreateTime.Millisecond > DateTime.Now.Millisecond).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Millisecond > DateTime.Now.Millisecond).ToList());
|
data.Add(select.Where(a => a.Type.Time.Millisecond > DateTime.Now.Millisecond).ToList());
|
||||||
@ -281,7 +301,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (floor(microsecond(a__Type__Parent.`Time2`) / 1000) > floor(microsecond(now()) / 1000))
|
//WHERE (floor(microsecond(a__Type__Parent.`Time2`) / 1000) > floor(microsecond(now()) / 1000))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Ticks() {
|
public void Ticks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Ticks > DateTime.Now.Ticks).ToList());
|
data.Add(select.Where(a => a.CreateTime.Ticks > DateTime.Now.Ticks).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Ticks > DateTime.Now.Ticks).ToList());
|
data.Add(select.Where(a => a.Type.Time.Ticks > DateTime.Now.Ticks).ToList());
|
||||||
@ -299,7 +320,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, '1970-1-1', a__Type__Parent.`Time2`) * 10 + 621355968000000000) > (timestampdiff(microsecond, '1970-1-1', now()) * 10 + 621355968000000000))
|
//WHERE ((timestampdiff(microsecond, '1970-1-1', a__Type__Parent.`Time2`) * 10 + 621355968000000000) > (timestampdiff(microsecond, '1970-1-1', now()) * 10 + 621355968000000000))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Add() {
|
public void Add()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.Add(TimeSpan.FromDays(1)) > DateTime.Now).ToList());
|
||||||
@ -317,7 +339,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddDays() {
|
public void AddDays()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddDays(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddDays(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddDays(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddDays(1) > DateTime.Now).ToList());
|
||||||
@ -335,7 +358,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) day) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) day) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddHours() {
|
public void AddHours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddHours(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddHours(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddHours(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddHours(1) > DateTime.Now).ToList());
|
||||||
@ -353,7 +377,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) hour) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) hour) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddMilliseconds() {
|
public void AddMilliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddMilliseconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddMilliseconds(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddMilliseconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddMilliseconds(1) > DateTime.Now).ToList());
|
||||||
@ -371,7 +396,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) * 1000 microsecond) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) * 1000 microsecond) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddMinutes() {
|
public void AddMinutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddMinutes(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddMinutes(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddMinutes(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddMinutes(1) > DateTime.Now).ToList());
|
||||||
@ -389,7 +415,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) minute) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) minute) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddMonths() {
|
public void AddMonths()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddMonths(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddMonths(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddMonths(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddMonths(1) > DateTime.Now).ToList());
|
||||||
@ -407,7 +434,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) month) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) month) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddSeconds() {
|
public void AddSeconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddSeconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddSeconds(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddSeconds(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddSeconds(1) > DateTime.Now).ToList());
|
||||||
@ -425,7 +453,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) second) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) second) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddTicks() {
|
public void AddTicks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddTicks(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddTicks(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddTicks(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddTicks(1) > DateTime.Now).ToList());
|
||||||
@ -443,7 +472,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) / 10 microsecond) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) / 10 microsecond) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddYears() {
|
public void AddYears()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddYears(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddYears(1) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1) > DateTime.Now).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1) > DateTime.Now).ToList());
|
||||||
@ -461,7 +491,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) year) > now())
|
//WHERE (date_add(a__Type__Parent.`Time2`, interval (1) year) > now())
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Subtract() {
|
public void Subtract()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => a.Type.Time.Subtract(DateTime.Now).TotalSeconds > 0).ToList());
|
||||||
@ -493,7 +524,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_sub(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > a.`CreateTime`)
|
//WHERE (date_sub(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > a.`CreateTime`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Á½¸öÈÕÆÚÏà¼õ_Ч¹ûͬSubtract() {
|
public void Á½¸öÈÕÆÚÏà¼õ_Ч¹ûͬSubtract()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (a.CreateTime - DateTime.Now).TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => (a.CreateTime - DateTime.Now).TotalSeconds > 0).ToList());
|
||||||
data.Add(select.Where(a => (a.Type.Time - DateTime.Now).TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => (a.Type.Time - DateTime.Now).TotalSeconds > 0).ToList());
|
||||||
@ -525,7 +557,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (date_sub(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > a.`CreateTime`)
|
//WHERE (date_sub(a__Type__Parent.`Time2`, interval ((1 * 86400000000)) microsecond) > a.`CreateTime`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_Equals() {
|
public void this_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.AddYears(1).Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.CreateTime.AddYears(1).Equals(DateTime.Now)).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1).Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1).Equals(DateTime.Now)).ToList());
|
||||||
@ -543,7 +576,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_ToString() {
|
public void this_ToString()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.ToString().Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.CreateTime.ToString().Equals(DateTime.Now)).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1).ToString().Equals(DateTime.Now)).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1).ToString().Equals(DateTime.Now)).ToList());
|
||||||
@ -562,7 +596,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_Compare() {
|
public void DateTime_Compare()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.CompareTo(DateTime.Now) == 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.CompareTo(DateTime.Now) == 0).ToList());
|
||||||
data.Add(select.Where(a => a.Type.Time.AddYears(1).CompareTo(DateTime.Now) == 0).ToList());
|
data.Add(select.Where(a => a.Type.Time.AddYears(1).CompareTo(DateTime.Now) == 0).ToList());
|
||||||
@ -580,7 +615,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((date_add(a__Type__Parent.`Time2`, interval (1) year)) - (now())) = 0)
|
//WHERE (((date_add(a__Type__Parent.`Time2`, interval (1) year)) - (now())) = 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_DaysInMonth() {
|
public void DateTime_DaysInMonth()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.DaysInMonth(a.CreateTime.Year, a.CreateTime.Month) > 30).ToList());
|
data.Add(select.Where(a => DateTime.DaysInMonth(a.CreateTime.Year, a.CreateTime.Month) > 30).ToList());
|
||||||
data.Add(select.Where(a => DateTime.DaysInMonth(a.Type.Time.Year, a.Type.Time.Month) > 30).ToList());
|
data.Add(select.Where(a => DateTime.DaysInMonth(a.Type.Time.Year, a.Type.Time.Month) > 30).ToList());
|
||||||
@ -598,7 +634,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (dayofmonth(last_day(concat(year(a__Type__Parent.`Time2`), month(a__Type__Parent.`Time2`), '-01'))) > 30)
|
//WHERE (dayofmonth(last_day(concat(year(a__Type__Parent.`Time2`), month(a__Type__Parent.`Time2`), '-01'))) > 30)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_Equals() {
|
public void DateTime_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.Equals(a.CreateTime.AddYears(1), DateTime.Now)).ToList());
|
data.Add(select.Where(a => DateTime.Equals(a.CreateTime.AddYears(1), DateTime.Now)).ToList());
|
||||||
data.Add(select.Where(a => DateTime.Equals(a.Type.Time.AddYears(1), DateTime.Now)).ToList());
|
data.Add(select.Where(a => DateTime.Equals(a.Type.Time.AddYears(1), DateTime.Now)).ToList());
|
||||||
@ -616,7 +653,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
//WHERE ((date_add(a__Type__Parent.`Time2`, interval (1) year) = now()))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_IsLeapYear() {
|
public void DateTime_IsLeapYear()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.IsLeapYear(a.CreateTime.Year)).ToList());
|
data.Add(select.Where(a => DateTime.IsLeapYear(a.CreateTime.Year)).ToList());
|
||||||
data.Add(select.Where(a => DateTime.IsLeapYear(a.Type.Time.AddYears(1).Year)).ToList());
|
data.Add(select.Where(a => DateTime.IsLeapYear(a.Type.Time.AddYears(1).Year)).ToList());
|
||||||
@ -634,7 +672,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 4 = 0 AND (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 100 <> 0 OR (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 400 = 0))
|
//WHERE (((year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 4 = 0 AND (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 100 <> 0 OR (year(date_add(a__Type__Parent.`Time2`, interval (1) year))) % 400 = 0))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime_Parse() {
|
public void DateTime_Parse()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()) > DateTime.Now).ToList());
|
data.Add(select.Where(a => DateTime.Parse(a.CreateTime.ToString()) > DateTime.Now).ToList());
|
||||||
data.Add(select.Where(a => DateTime.Parse(a.Type.Time.AddYears(1).ToString()) > DateTime.Now).ToList());
|
data.Add(select.Where(a => DateTime.Parse(a.Type.Time.AddYears(1).ToString()) > DateTime.Now).ToList());
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlExpression {
|
namespace FreeSql.Tests.MySqlExpression
|
||||||
public class MathTest {
|
{
|
||||||
|
public class MathTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,13 +22,15 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -33,98 +38,117 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PI() {
|
public void PI()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.PI + a.Clicks > 0).ToList());
|
data.Add(select.Where(a => Math.PI + a.Clicks > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Abs() {
|
public void Abs()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Abs(-a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Math.Abs(-a.Clicks) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sign() {
|
public void Sign()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Sign(-a.Clicks) > 0).ToList());
|
data.Add(select.Where(a => Math.Sign(-a.Clicks) > 0).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Floor() {
|
public void Floor()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Floor(a.Clicks + 0.5) == a.Clicks).ToList());
|
data.Add(select.Where(a => Math.Floor(a.Clicks + 0.5) == a.Clicks).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Ceiling() {
|
public void Ceiling()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Ceiling(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Ceiling(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Round() {
|
public void Round()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5) == a.Clicks).ToList());
|
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5) == a.Clicks).ToList());
|
||||||
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5, 1) > a.Clicks).ToList());
|
data.Add(select.Where(a => Math.Round(a.Clicks + 0.5, 1) > a.Clicks).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Exp() {
|
public void Exp()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Exp(1) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Exp(1) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Log() {
|
public void Log()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Log(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Log(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Log10() {
|
public void Log10()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Log10(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Log10(a.Clicks + 0.5) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Pow() {
|
public void Pow()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Pow(2, a.Clicks) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Pow(2, a.Clicks) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sqrt() {
|
public void Sqrt()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Sqrt(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Sqrt(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Cos() {
|
public void Cos()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Cos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Cos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sin() {
|
public void Sin()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Sin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Sin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Tan() {
|
public void Tan()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Tan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Tan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Acos() {
|
public void Acos()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Acos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Acos(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Asin() {
|
public void Asin()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Asin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Asin(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Atan() {
|
public void Atan()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Atan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Atan(Math.Pow(2, a.Clicks)) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Atan2() {
|
public void Atan2()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Atan2(2, a.Clicks) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Atan2(2, a.Clicks) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Truncate() {
|
public void Truncate()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => Math.Truncate(a.Clicks * 1.0 / 3) == a.Clicks + 1).ToList());
|
data.Add(select.Where(a => Math.Truncate(a.Clicks * 1.0 / 3) == a.Clicks + 1).ToList());
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,21 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlExpression {
|
namespace FreeSql.Tests.MySqlExpression
|
||||||
public class OtherTest {
|
{
|
||||||
|
public class OtherTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
ISelect<TableAllType> select => g.mysql.Select<TableAllType>();
|
||||||
|
|
||||||
public OtherTest() {
|
public OtherTest()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean() {
|
public void Boolean()
|
||||||
|
{
|
||||||
var t1 = select.Where(a => a.testFieldBool == true).ToList();
|
var t1 = select.Where(a => a.testFieldBool == true).ToList();
|
||||||
var t2 = select.Where(a => a.testFieldBool != true).ToList();
|
var t2 = select.Where(a => a.testFieldBool != true).ToList();
|
||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
@ -30,7 +34,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Array() {
|
public void Array()
|
||||||
|
{
|
||||||
int[] nullarr = null;
|
int[] nullarr = null;
|
||||||
Assert.Throws<MySqlException>(() => { select.Where(a => nullarr.Contains(a.testFieldInt)).ToList(); });
|
Assert.Throws<MySqlException>(() => { select.Where(a => nullarr.Contains(a.testFieldInt)).ToList(); });
|
||||||
Assert.Throws<MySqlException>(() => { select.Where(a => new int[0].Contains(a.testFieldInt)).ToList(); });
|
Assert.Throws<MySqlException>(() => { select.Where(a => new int[0].Contains(a.testFieldInt)).ToList(); });
|
||||||
@ -64,7 +69,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Table(Name = "tb_alltype")]
|
[Table(Name = "tb_alltype")]
|
||||||
class TableAllType {
|
class TableAllType
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlExpression {
|
namespace FreeSql.Tests.MySqlExpression
|
||||||
public class StringTest {
|
{
|
||||||
|
public class StringTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,26 +22,30 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
class TestEqualsGuid {
|
class TestEqualsGuid
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public bool IsDeleted { get; set; }
|
public bool IsDeleted { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Equals__() {
|
public void Equals__()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.Equals("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.Equals("aaa")).ToList());
|
||||||
list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
|
list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
|
||||||
@ -46,7 +53,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Empty() {
|
public void Empty()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => (a.Title ?? "") == string.Empty).ToSql());
|
data.Add(select.Where(a => (a.Title ?? "") == string.Empty).ToSql());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -55,7 +63,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void StartsWith() {
|
public void StartsWith()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.StartsWith("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.StartsWith("aaa")).ToList());
|
||||||
list.Add(select.Where(a => a.Title.StartsWith(a.Title)).ToList());
|
list.Add(select.Where(a => a.Title.StartsWith(a.Title)).ToList());
|
||||||
@ -97,7 +106,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`))
|
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EndsWith() {
|
public void EndsWith()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.EndsWith("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.EndsWith("aaa")).ToList());
|
||||||
list.Add(select.Where(a => a.Title.EndsWith(a.Title)).ToList());
|
list.Add(select.Where(a => a.Title.EndsWith(a.Title)).ToList());
|
||||||
@ -139,7 +149,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat(a__Type.`Name`, '%'))
|
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat(a__Type.`Name`, '%'))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Contains() {
|
public void Contains()
|
||||||
|
{
|
||||||
var list = new List<object>();
|
var list = new List<object>();
|
||||||
list.Add(select.Where(a => a.Title.Contains("aaa")).ToList());
|
list.Add(select.Where(a => a.Title.Contains("aaa")).ToList());
|
||||||
list.Add(select.Where(a => a.Title.Contains(a.Title)).ToList());
|
list.Add(select.Where(a => a.Title.Contains(a.Title)).ToList());
|
||||||
@ -181,7 +192,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%'))
|
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%'))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToLower() {
|
public void ToLower()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.ToLower() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.ToLower() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.ToLower() == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.ToLower() == a.Title).ToList());
|
||||||
@ -223,7 +235,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE(lower(concat(lower(a.`Title`), 'aaa')) = a__Type.`Name`)
|
//WHERE(lower(concat(lower(a.`Title`), 'aaa')) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToUpper() {
|
public void ToUpper()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.ToUpper() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.ToUpper() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.ToUpper() == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.ToUpper() == a.Title).ToList());
|
||||||
@ -265,7 +278,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (upper(concat(upper(a.`Title`), 'aaa')) = a__Type.`Name`)
|
//WHERE (upper(concat(upper(a.`Title`), 'aaa')) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Substring() {
|
public void Substring()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Substring(0) == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.Substring(0) == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.Substring(0) == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.Substring(0) == a.Title).ToList());
|
||||||
@ -307,7 +321,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (substr(concat(substr(a.`Title`, 1), 'aaa'), 2, 2) = a__Type.`Name`)
|
//WHERE (substr(concat(substr(a.`Title`, 1), 'aaa'), 2, 2) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Length() {
|
public void Length()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Length == 0).ToList());
|
data.Add(select.Where(a => a.Title.Length == 0).ToList());
|
||||||
data.Add(select.Where(a => a.Title.Length == 1).ToList());
|
data.Add(select.Where(a => a.Title.Length == 1).ToList());
|
||||||
@ -349,7 +364,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (char_length(concat(a.`Title`, 'aaa')) = char_length(a__Type.`Name`))
|
//WHERE (char_length(concat(a.`Title`, 'aaa')) = char_length(a__Type.`Name`))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IndexOf() {
|
public void IndexOf()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.IndexOf("aaa") == -1).ToList());
|
data.Add(select.Where(a => a.Title.IndexOf("aaa") == -1).ToList());
|
||||||
data.Add(select.Where(a => a.Title.IndexOf("aaa", 2) == -1).ToList());
|
data.Add(select.Where(a => a.Title.IndexOf("aaa", 2) == -1).ToList());
|
||||||
@ -391,7 +407,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((locate(concat(a.`Title`, 'aaa'), 'aaa', 3) - 1) = char_length(a__Type.`Name`) + 1)
|
//WHERE ((locate(concat(a.`Title`, 'aaa'), 'aaa', 3) - 1) = char_length(a__Type.`Name`) + 1)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PadLeft() {
|
public void PadLeft()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.PadLeft(10, 'a') == a.Title).ToList());
|
||||||
@ -433,7 +450,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (lpad(concat(lpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
//WHERE (lpad(concat(lpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void PadRight() {
|
public void PadRight()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.PadRight(10, 'a') == a.Title).ToList());
|
||||||
@ -475,7 +493,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (rpad(concat(rpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
//WHERE (rpad(concat(rpad(a.`Title`, 10, 'a'), 'aaa'), 20, 'b') = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Trim() {
|
public void Trim()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Trim() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.Trim() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.Trim('a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.Trim('a') == a.Title).ToList());
|
||||||
@ -517,7 +536,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (trim('c' from trim('b' from trim('a' from concat(trim('c' from trim('b' from trim('a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
//WHERE (trim('c' from trim('b' from trim('a' from concat(trim('c' from trim('b' from trim('a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TrimStart() {
|
public void TrimStart()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.TrimStart() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.TrimStart() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.TrimStart('a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.TrimStart('a') == a.Title).ToList());
|
||||||
@ -559,7 +579,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from concat(trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from a.`Title`)))))), 'aaa'))))))) = a__Type.`Name`)
|
//WHERE (trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from concat(trim(trailing 'c' from trim(leading 'c' from trim(trailing 'b' from trim(leading 'b' from trim(trailing 'a' from trim(leading 'a' from a.`Title`)))))), 'aaa'))))))) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TrimEnd() {
|
public void TrimEnd()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.TrimEnd() == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.TrimEnd() == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.TrimEnd('a') == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.TrimEnd('a') == a.Title).ToList());
|
||||||
@ -601,7 +622,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from concat(trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
//WHERE (trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from concat(trim(trailing 'c' from trim(trailing 'b' from trim(trailing 'a' from a.`Title`))), 'aaa')))) = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Replace() {
|
public void Replace()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.Replace("a", "b") == "aaa").ToList());
|
data.Add(select.Where(a => a.Title.Replace("a", "b") == "aaa").ToList());
|
||||||
data.Add(select.Where(a => a.Title.Replace("a", "b").Replace("b", "c") == a.Title).ToList());
|
data.Add(select.Where(a => a.Title.Replace("a", "b").Replace("b", "c") == a.Title).ToList());
|
||||||
@ -643,7 +665,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (concat(replace(replace(replace(a.`Title`, 'a', 'b'), 'b', 'c'), a__Type.`Name`, 'a'), 'aaa') = a__Type.`Name`)
|
//WHERE (concat(replace(replace(replace(a.`Title`, 'a', 'b'), 'b', 'c'), a__Type.`Name`, 'a'), 'aaa') = a__Type.`Name`)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CompareTo() {
|
public void CompareTo()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.Title.CompareTo(a.Title) == 0).ToList());
|
data.Add(select.Where(a => a.Title.CompareTo(a.Title) == 0).ToList());
|
||||||
data.Add(select.Where(a => a.Title.CompareTo(a.Title) > 0).ToList());
|
data.Add(select.Where(a => a.Title.CompareTo(a.Title) > 0).ToList());
|
||||||
@ -686,7 +709,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void string_IsNullOrEmpty() {
|
public void string_IsNullOrEmpty()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title)).ToList());
|
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title)).ToList());
|
||||||
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title) == false).ToList());
|
data.Add(select.Where(a => string.IsNullOrEmpty(a.Title) == false).ToList());
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.MySqlExpression {
|
namespace FreeSql.Tests.MySqlExpression
|
||||||
public class TimeSpanTest {
|
{
|
||||||
|
public class TimeSpanTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.mysql.Select<Topic>();
|
ISelect<Topic> select => g.mysql.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,20 +22,23 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Zero() {
|
public void Zero()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -40,7 +46,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > 0)
|
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MinValue() {
|
public void MinValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.MinValue).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay > TimeSpan.MinValue).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -48,7 +55,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > -922337203685477580)
|
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) > -922337203685477580)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MaxValue() {
|
public void MaxValue()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay < TimeSpan.MaxValue).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay < TimeSpan.MaxValue).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -56,7 +64,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) < 922337203685477580)
|
//WHERE (timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) < 922337203685477580)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Days() {
|
public void Days()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Days == 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Days == 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -64,7 +73,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 86400000000) = 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 86400000000) = 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Hours() {
|
public void Hours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Hours > 0).ToSql());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Hours > 0).ToSql());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -72,7 +82,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 3600000000) mod 24 > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 3600000000) mod 24 > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Milliseconds() {
|
public void Milliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Milliseconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Milliseconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -80,7 +91,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000 mod 1000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000 mod 1000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Minutes() {
|
public void Minutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Minutes > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Minutes > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -88,7 +100,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 60000000 mod 60) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 60000000 mod 60) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Seconds() {
|
public void Seconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Seconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Seconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -96,7 +109,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000000 mod 60) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) div 1000000 mod 60) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Ticks() {
|
public void Ticks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Ticks > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Ticks > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -104,7 +118,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) * 10) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) * 10) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalDays() {
|
public void TotalDays()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalDays > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalDays > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -112,7 +127,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 86400000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 86400000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalHours() {
|
public void TotalHours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalHours > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalHours > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -120,7 +136,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 3600000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 3600000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalMilliseconds() {
|
public void TotalMilliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMilliseconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMilliseconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -128,7 +145,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalMinutes() {
|
public void TotalMinutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMinutes > 0).ToSql());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalMinutes > 0).ToSql());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -136,7 +154,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 60000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 60000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TotalSeconds() {
|
public void TotalSeconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalSeconds > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.TotalSeconds > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -144,7 +163,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000000) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) / 1000000) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Add() {
|
public void Add()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Add(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Add(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -152,7 +172,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) + (1 * 86400000000)) > 0)
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) + (1 * 86400000000)) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Subtract() {
|
public void Subtract()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Subtract(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Subtract(TimeSpan.FromDays(1)) > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -160,7 +181,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) - (1 * 86400000000)) > 0)
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) - (1 * 86400000000)) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CompareTo() {
|
public void CompareTo()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.CompareTo(TimeSpan.FromDays(1)) > 0).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.CompareTo(TimeSpan.FromDays(1)) > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -168,7 +190,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_Equals() {
|
public void this_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Equals(TimeSpan.FromDays(1))).ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Equals(TimeSpan.FromDays(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -176,7 +199,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void this_ToString() {
|
public void this_ToString()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => a.CreateTime.TimeOfDay.ToString() == "ssss").ToList());
|
data.Add(select.Where(a => a.CreateTime.TimeOfDay.ToString() == "ssss").ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -185,7 +209,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_Compare() {
|
public void TimeSpan_Compare()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Compare(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1)) > 0).ToList());
|
data.Add(select.Where(a => TimeSpan.Compare(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1)) > 0).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -193,7 +218,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
//WHERE (((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000)) - ((1 * 86400000000))) > 0)
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_Equals() {
|
public void TimeSpan_Equals()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -201,7 +227,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromDays() {
|
public void TimeSpan_FromDays()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromDays(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -209,7 +236,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 86400000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromHours() {
|
public void TimeSpan_FromHours()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromHours(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromHours(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -217,7 +245,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 3600000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 3600000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromMilliseconds() {
|
public void TimeSpan_FromMilliseconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMilliseconds(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMilliseconds(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -225,7 +254,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromMinutes() {
|
public void TimeSpan_FromMinutes()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMinutes(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromMinutes(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -233,7 +263,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 60000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 60000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromSeconds() {
|
public void TimeSpan_FromSeconds()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromSeconds(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromSeconds(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -241,7 +272,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000000)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 * 1000000)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_FromTicks() {
|
public void TimeSpan_FromTicks()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromTicks(1))).ToList());
|
data.Add(select.Where(a => TimeSpan.Equals(a.CreateTime.TimeOfDay, TimeSpan.FromTicks(1))).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
@ -249,7 +281,8 @@ namespace FreeSql.Tests.MySqlExpression {
|
|||||||
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 / 10)))
|
//WHERE ((timestampdiff(microsecond, date_format(a.`CreateTime`, '1970-1-1 %H:%i:%s.%f'), a.`CreateTime`) + 62135596800000000) = (1 / 10)))
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan_Parse() {
|
public void TimeSpan_Parse()
|
||||||
|
{
|
||||||
var data = new List<object>();
|
var data = new List<object>();
|
||||||
data.Add(select.Where(a => TimeSpan.Parse(a.CreateTime.TimeOfDay.ToString()) > TimeSpan.Zero).ToList());
|
data.Add(select.Where(a => TimeSpan.Parse(a.CreateTime.TimeOfDay.ToString()) > TimeSpan.Zero).ToList());
|
||||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.Oracle {
|
namespace FreeSql.Tests.Oracle
|
||||||
public class OracleDeleteTest {
|
{
|
||||||
|
public class OracleDeleteTest
|
||||||
|
{
|
||||||
|
|
||||||
IDelete<Topic> delete => g.oracle.Delete<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IDelete<Topic> delete => g.oracle.Delete<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
[Table(Name = "tb_topic22211")]
|
[Table(Name = "tb_topic22211")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Clicks { get; set; }
|
public int? Clicks { get; set; }
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Dywhere() {
|
public void Dywhere()
|
||||||
|
{
|
||||||
Assert.Null(g.oracle.Delete<Topic>().ToSql());
|
Assert.Null(g.oracle.Delete<Topic>().ToSql());
|
||||||
var sql = g.oracle.Delete<Topic>(new[] { 1, 2 }).ToSql();
|
var sql = g.oracle.Delete<Topic>(new[] { 1, 2 }).ToSql();
|
||||||
Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1 OR \"ID\" = 2)", sql);
|
Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1 OR \"ID\" = 2)", sql);
|
||||||
@ -36,7 +40,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1)", sql);
|
||||||
|
|
||||||
@ -54,24 +59,28 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
|
|
||||||
var id = g.oracle.Insert<Topic>(new Topic { Title = "xxxx", CreateTime = DateTime.Now }).ExecuteIdentity();
|
var id = g.oracle.Insert<Topic>(new Topic { Title = "xxxx", CreateTime = DateTime.Now }).ExecuteIdentity();
|
||||||
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
|
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteDeleted() {
|
public void ExecuteDeleted()
|
||||||
|
{
|
||||||
|
|
||||||
//var item = g.oracle.Insert<Topic>(new Topic { Title = "xxxx", CreateTime = DateTime.Now }).ExecuteInserted();
|
//var item = g.oracle.Insert<Topic>(new Topic { Title = "xxxx", CreateTime = DateTime.Now }).ExecuteInserted();
|
||||||
//Assert.Equal(item[0].Id, delete.Where(a => a.Id == item[0].Id).ExecuteDeleted()[0].Id);
|
//Assert.Equal(item[0].Id, delete.Where(a => a.Id == item[0].Id).ExecuteDeleted()[0].Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
Assert.Null(g.oracle.Delete<Topic>().ToSql());
|
Assert.Null(g.oracle.Delete<Topic>().ToSql());
|
||||||
var sql = g.oracle.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "TopicAsTable").ToSql();
|
var sql = g.oracle.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "TopicAsTable").ToSql();
|
||||||
Assert.Equal("DELETE FROM \"TopicAsTable\" WHERE (\"ID\" = 1 OR \"ID\" = 2)", sql);
|
Assert.Equal("DELETE FROM \"TopicAsTable\" WHERE (\"ID\" = 1 OR \"ID\" = 2)", sql);
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.Oracle {
|
namespace FreeSql.Tests.Oracle
|
||||||
public class OracleInsertTest {
|
{
|
||||||
|
public class OracleInsertTest
|
||||||
|
{
|
||||||
|
|
||||||
IInsert<Topic> insert => g.oracle.Insert<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
IInsert<Topic> insert => g.oracle.Insert<Topic>(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
[Table(Name = "tb_topic_insert")]
|
[Table(Name = "tb_topic_insert")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Clicks { get; set; }
|
public int? Clicks { get; set; }
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AppendData() {
|
public void AppendData()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -76,7 +80,8 @@ INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks_9, :Title_9)
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InsertColumns() {
|
public void InsertColumns()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -96,7 +101,7 @@ INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title_9)
|
|||||||
SELECT 1 FROM DUAL", sql);
|
SELECT 1 FROM DUAL", sql);
|
||||||
data.Add(insert.AppendData(items.First()).ExecuteIdentity());
|
data.Add(insert.AppendData(items.First()).ExecuteIdentity());
|
||||||
|
|
||||||
sql = insert.AppendData(items).InsertColumns(a =>new { a.Title, a.Clicks }).ToSql();
|
sql = insert.AppendData(items).InsertColumns(a => new { a.Title, a.Clicks }).ToSql();
|
||||||
Assert.Equal(@"INSERT ALL
|
Assert.Equal(@"INSERT ALL
|
||||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks_0, :Title_0)
|
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks_0, :Title_0)
|
||||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks_1, :Title_1)
|
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks_1, :Title_1)
|
||||||
@ -112,7 +117,8 @@ INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks_9, :Title_9)
|
|||||||
data.Add(insert.AppendData(items.First()).ExecuteIdentity());
|
data.Add(insert.AppendData(items.First()).ExecuteIdentity());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IgnoreColumns() {
|
public void IgnoreColumns()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -148,7 +154,8 @@ INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks_9)
|
|||||||
data.Add(insert.AppendData(items.First()).ExecuteIdentity());
|
data.Add(insert.AppendData(items.First()).ExecuteIdentity());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -156,14 +163,16 @@ INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks_9)
|
|||||||
Assert.Equal(10, insert.AppendData(items).ExecuteAffrows());
|
Assert.Equal(10, insert.AppendData(items).ExecuteAffrows());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteIdentity() {
|
public void ExecuteIdentity()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
Assert.NotEqual(0, insert.AppendData(items.First()).ExecuteIdentity());
|
Assert.NotEqual(0, insert.AppendData(items.First()).ExecuteIdentity());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteInserted() {
|
public void ExecuteInserted()
|
||||||
|
{
|
||||||
//var items = new List<Topic>();
|
//var items = new List<Topic>();
|
||||||
//for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
//for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -171,7 +180,8 @@ INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks_9)
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
var items = new List<Topic>();
|
var items = new List<Topic>();
|
||||||
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
|
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
|
||||||
|
|
||||||
|
@ -4,13 +4,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.Oracle {
|
namespace FreeSql.Tests.Oracle
|
||||||
public class OracleSelectTest {
|
{
|
||||||
|
public class OracleSelectTest
|
||||||
|
{
|
||||||
|
|
||||||
ISelect<Topic> select => g.oracle.Select<Topic>();
|
ISelect<Topic> select => g.oracle.Select<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic22")]
|
[Table(Name = "tb_topic22")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
@ -19,21 +22,24 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeInfo {
|
class TestTypeInfo
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Guid { get; set; }
|
public int Guid { get; set; }
|
||||||
public int ParentId { get; set; }
|
public int ParentId { get; set; }
|
||||||
public TestTypeParentInfo Parent { get; set; }
|
public TestTypeParentInfo Parent { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
}
|
}
|
||||||
class TestTypeParentInfo {
|
class TestTypeParentInfo
|
||||||
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<TestTypeInfo> Types { get; set; }
|
public List<TestTypeInfo> Types { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
class TopicInserts {
|
class TopicInserts
|
||||||
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public int Clicks { get; set; }
|
public int Clicks { get; set; }
|
||||||
public int TypeGuid { get; set; }
|
public int TypeGuid { get; set; }
|
||||||
@ -41,7 +47,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Song {
|
public partial class Song
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public DateTime? Create_time { get; set; }
|
public DateTime? Create_time { get; set; }
|
||||||
@ -51,14 +58,16 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
public virtual ICollection<Tag> Tags { get; set; }
|
public virtual ICollection<Tag> Tags { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Song_tag {
|
public partial class Song_tag
|
||||||
|
{
|
||||||
public int Song_id { get; set; }
|
public int Song_id { get; set; }
|
||||||
public virtual Song Song { get; set; }
|
public virtual Song Song { get; set; }
|
||||||
|
|
||||||
public int Tag_id { get; set; }
|
public int Tag_id { get; set; }
|
||||||
public virtual Tag Tag { get; set; }
|
public virtual Tag Tag { get; set; }
|
||||||
}
|
}
|
||||||
public partial class Tag {
|
public partial class Tag
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Parent_id { get; set; }
|
public int? Parent_id { get; set; }
|
||||||
@ -72,7 +81,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsSelect() {
|
public void AsSelect()
|
||||||
|
{
|
||||||
//OneToOne、ManyToOne
|
//OneToOne、ManyToOne
|
||||||
var t0 = g.oracle.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤语").ToSql();
|
var t0 = g.oracle.Select<Tag>().Where(a => a.Parent.Parent.Name == "粤语").ToSql();
|
||||||
//SELECT a.`Id`, a.`Parent_id`, a__Parent.`Id` as3, a__Parent.`Parent_id` as4, a__Parent.`Ddd`, a__Parent.`Name`, a.`Ddd` as7, a.`Name` as8
|
//SELECT a.`Id`, a.`Parent_id`, a__Parent.`Id` as3, a__Parent.`Parent_id` as4, a__Parent.`Ddd`, a__Parent.`Name`, a.`Ddd` as7, a.`Name` as8
|
||||||
@ -105,7 +115,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Lazy() {
|
public void Lazy()
|
||||||
|
{
|
||||||
var tags = g.oracle.Select<Tag>().Where(a => a.Parent.Name == "xxx")
|
var tags = g.oracle.Select<Tag>().Where(a => a.Parent.Name == "xxx")
|
||||||
.LeftJoin(a => a.Parent_id == a.Parent.Id)
|
.LeftJoin(a => a.Parent_id == a.Parent.Id)
|
||||||
.ToSql();
|
.ToSql();
|
||||||
@ -114,7 +125,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToDataTable() {
|
public void ToDataTable()
|
||||||
|
{
|
||||||
var items = new List<TopicInserts>();
|
var items = new List<TopicInserts>();
|
||||||
for (var a = 0; a < 11; a++) items.Add(new TopicInserts { Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
for (var a = 0; a < 11; a++) items.Add(new TopicInserts { Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now });
|
||||||
|
|
||||||
@ -128,13 +140,15 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
var dt2 = select.Limit(10).ToDataTable("id, 111222");
|
var dt2 = select.Limit(10).ToDataTable("id, 111222");
|
||||||
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
|
var dt3 = select.Limit(10).ToDataTable(a => new { a.Id, a.Type.Name, now = DateTime.Now });
|
||||||
}
|
}
|
||||||
class TestDto {
|
class TestDto
|
||||||
|
{
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string name { get; set; } //这是join表的属性
|
public string name { get; set; } //这是join表的属性
|
||||||
public int ParentId { get; set; } //这是join表的属性
|
public int ParentId { get; set; } //这是join表的属性
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToList() {
|
public void ToList()
|
||||||
|
{
|
||||||
|
|
||||||
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
var testDto1 = select.Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
|
||||||
var testDto2 = select.Limit(10).ToList(a => new TestDto());
|
var testDto2 = select.Limit(10).ToList(a => new TestDto());
|
||||||
@ -153,20 +167,24 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
var t11 = select.Where(a => a.Type.Name.Length > 0).ToList(true);
|
var t11 = select.Where(a => a.Type.Name.Length > 0).ToList(true);
|
||||||
var t21 = select.Where(a => a.Type.Parent.Name.Length > 0).ToList(true);
|
var t21 = select.Where(a => a.Type.Parent.Name.Length > 0).ToList(true);
|
||||||
}
|
}
|
||||||
class TestGuidIdToList {
|
class TestGuidIdToList
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
public string title { get; set; } = Guid.NewGuid().ToString();
|
public string title { get; set; } = Guid.NewGuid().ToString();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToOne() {
|
public void ToOne()
|
||||||
|
{
|
||||||
var testnotfind = select.Where("1=2").First(a => a.CreateTime);
|
var testnotfind = select.Where("1=2").First(a => a.CreateTime);
|
||||||
Assert.Equal(default(DateTime), testnotfind);
|
Assert.Equal(default(DateTime), testnotfind);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToSql() {
|
public void ToSql()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Any() {
|
public void Any()
|
||||||
|
{
|
||||||
var count = select.Where(a => 1 == 1).Count();
|
var count = select.Where(a => 1 == 1).Count();
|
||||||
Assert.False(select.Where(a => 1 == 2).Any());
|
Assert.False(select.Where(a => 1 == 2).Any());
|
||||||
Assert.Equal(count > 0, select.Where(a => 1 == 1).Any());
|
Assert.Equal(count > 0, select.Where(a => 1 == 1).Any());
|
||||||
@ -188,18 +206,21 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
collectionSelect.ToList();
|
collectionSelect.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Count() {
|
public void Count()
|
||||||
|
{
|
||||||
var count = select.Where(a => 1 == 1).Count();
|
var count = select.Where(a => 1 == 1).Count();
|
||||||
select.Where(a => 1 == 1).Count(out var count2);
|
select.Where(a => 1 == 1).Count(out var count2);
|
||||||
Assert.Equal(count, count2);
|
Assert.Equal(count, count2);
|
||||||
Assert.Equal(0, select.Where(a => 1 == 2).Count());
|
Assert.Equal(0, select.Where(a => 1 == 2).Count());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Master() {
|
public void Master()
|
||||||
|
{
|
||||||
Assert.StartsWith(" SELECT", select.Master().Where(a => 1 == 1).ToSql());
|
Assert.StartsWith(" SELECT", select.Master().Where(a => 1 == 1).ToSql());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void From() {
|
public void From()
|
||||||
|
{
|
||||||
var query2 = select.From<TestTypeInfo>((s, b) => s
|
var query2 = select.From<TestTypeInfo>((s, b) => s
|
||||||
.LeftJoin(a => a.TypeGuid == b.Guid)
|
.LeftJoin(a => a.TypeGuid == b.Guid)
|
||||||
);
|
);
|
||||||
@ -216,7 +237,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
query3.ToList();
|
query3.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LeftJoin() {
|
public void LeftJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -284,7 +306,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InnerJoin() {
|
public void InnerJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -353,7 +376,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void RightJoin() {
|
public void RightJoin()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid);
|
var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -422,7 +446,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
|
var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
|
||||||
var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
|
var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
|
||||||
var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
|
var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
|
||||||
@ -491,7 +516,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereIf() {
|
public void WhereIf()
|
||||||
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
var query = select.WhereIf(true, a => a.Id == 10);
|
var query = select.WhereIf(true, a => a.Id == 10);
|
||||||
var sql = query.ToSql().Replace("\r\n", "");
|
var sql = query.ToSql().Replace("\r\n", "");
|
||||||
@ -585,7 +611,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
query.ToList();
|
query.ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
var sql2222 = select.Where(a => select.Where(b => b.Id == a.Id).Any()).ToList();
|
var sql2222 = select.Where(a => select.Where(b => b.Id == a.Id).Any()).ToList();
|
||||||
|
|
||||||
sql2222 = select.Where(a =>
|
sql2222 = select.Where(a =>
|
||||||
@ -598,7 +625,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
).ToList();
|
).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GroupBy() {
|
public void GroupBy()
|
||||||
|
{
|
||||||
var groupby = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
|
var groupby = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
|
||||||
.Where(a => a.Id == 1)
|
.Where(a => a.Id == 1)
|
||||||
)
|
)
|
||||||
@ -609,7 +637,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
.OrderByDescending(a => a.Count())
|
.OrderByDescending(a => a.Count())
|
||||||
.Offset(10)
|
.Offset(10)
|
||||||
.Limit(2)
|
.Limit(2)
|
||||||
.ToList(a => new {
|
.ToList(a => new
|
||||||
|
{
|
||||||
a.Key.tt2,
|
a.Key.tt2,
|
||||||
cou1 = a.Count(),
|
cou1 = a.Count(),
|
||||||
arg1 = a.Avg(a.Key.mod4),
|
arg1 = a.Avg(a.Key.mod4),
|
||||||
@ -623,7 +652,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
var aggsql1 = select
|
var aggsql1 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -631,7 +661,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
});
|
});
|
||||||
var aggtolist1 = select
|
var aggtolist1 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToList(b => new {
|
.ToList(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -640,7 +671,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
var aggsql2 = select
|
var aggsql2 = select
|
||||||
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key.Title,
|
b.Key.Title,
|
||||||
b.Key.yyyy,
|
b.Key.yyyy,
|
||||||
|
|
||||||
@ -650,7 +682,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
});
|
});
|
||||||
var aggtolist2 = select
|
var aggtolist2 = select
|
||||||
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
.GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) })
|
||||||
.ToList(b => new {
|
.ToList(b => new
|
||||||
|
{
|
||||||
b.Key.Title,
|
b.Key.Title,
|
||||||
b.Key.yyyy,
|
b.Key.yyyy,
|
||||||
|
|
||||||
@ -661,7 +694,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
var aggsql3 = select
|
var aggsql3 = select
|
||||||
.GroupBy(a => a.Title)
|
.GroupBy(a => a.Title)
|
||||||
.ToSql(b => new {
|
.ToSql(b => new
|
||||||
|
{
|
||||||
b.Key,
|
b.Key,
|
||||||
cou = b.Count(),
|
cou = b.Count(),
|
||||||
sum = b.Sum(b.Key),
|
sum = b.Sum(b.Key),
|
||||||
@ -670,23 +704,28 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ToAggregate() {
|
public void ToAggregate()
|
||||||
|
{
|
||||||
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
|
var sql = select.ToAggregate(a => new { sum = a.Sum(a.Key.Id + 11.11), avg = a.Avg(a.Key.Id), count = a.Count(), max = a.Max(a.Key.Id), min = a.Min(a.Key.Id) });
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void OrderBy() {
|
public void OrderBy()
|
||||||
|
{
|
||||||
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
var sql = select.Offset(10).OrderBy(a => new Random().NextDouble()).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Skip_Offset() {
|
public void Skip_Offset()
|
||||||
|
{
|
||||||
var sql = select.Offset(10).ToList();
|
var sql = select.Offset(10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Take_Limit() {
|
public void Take_Limit()
|
||||||
|
{
|
||||||
var sql = select.Limit(10).ToList();
|
var sql = select.Limit(10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Page() {
|
public void Page()
|
||||||
|
{
|
||||||
var sql1 = select.Page(1, 10).ToList();
|
var sql1 = select.Page(1, 10).ToList();
|
||||||
var sql2 = select.Page(2, 10).ToList();
|
var sql2 = select.Page(2, 10).ToList();
|
||||||
var sql3 = select.Page(3, 10).ToList();
|
var sql3 = select.Page(3, 10).ToList();
|
||||||
@ -696,33 +735,41 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
var sql33 = select.OrderBy(a => new Random().NextDouble()).Page(3, 10).ToList();
|
var sql33 = select.OrderBy(a => new Random().NextDouble()).Page(3, 10).ToList();
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Distinct() {
|
public void Distinct()
|
||||||
|
{
|
||||||
var t1 = select.Distinct().ToList(a => a.Title);
|
var t1 = select.Distinct().ToList(a => a.Title);
|
||||||
var t2 = select.Distinct().Limit(10).ToList(a => a.Title);
|
var t2 = select.Distinct().Limit(10).ToList(a => a.Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Sum() {
|
public void Sum()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Min() {
|
public void Min()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Max() {
|
public void Max()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Avg() {
|
public void Avg()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void As() {
|
public void As()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
|
|
||||||
var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList();
|
var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList();
|
||||||
|
|
||||||
Func<Type, string, string> tableRule = (type, oldname) => {
|
Func<Type, string, string> tableRule = (type, oldname) =>
|
||||||
|
{
|
||||||
if (type == typeof(Topic)) return oldname + "AsTable1";
|
if (type == typeof(Topic)) return oldname + "AsTable1";
|
||||||
else if (type == typeof(TestTypeInfo)) return oldname + "AsTable2";
|
else if (type == typeof(TestTypeInfo)) return oldname + "AsTable2";
|
||||||
return oldname + "AsTable";
|
return oldname + "AsTable";
|
||||||
@ -784,14 +831,16 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22AsTable1\" a LEFT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = :bname", sql);
|
Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22AsTable1\" a LEFT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TYPEGUID\" and b.\"NAME\" = :bname", sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TiOtmModel1 {
|
public class TiOtmModel1
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public virtual TiOtmModel2 model2 { get; set; }
|
public virtual TiOtmModel2 model2 { get; set; }
|
||||||
|
|
||||||
public string m1name { get; set; }
|
public string m1name { get; set; }
|
||||||
}
|
}
|
||||||
public class TiOtmModel2 {
|
public class TiOtmModel2
|
||||||
|
{
|
||||||
[Column(IsPrimary = true)]
|
[Column(IsPrimary = true)]
|
||||||
public int model2id { get; set; }
|
public int model2id { get; set; }
|
||||||
public virtual TiOtmModel1 model1 { get; set; }
|
public virtual TiOtmModel1 model1 { get; set; }
|
||||||
@ -800,7 +849,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
public List<TiOtmModel3> childs { get; set; }
|
public List<TiOtmModel3> childs { get; set; }
|
||||||
}
|
}
|
||||||
public class TiOtmModel3 {
|
public class TiOtmModel3
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
@ -809,7 +859,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
|
|
||||||
public List<TiOtmModel4> childs2 { get; set; }
|
public List<TiOtmModel4> childs2 { get; set; }
|
||||||
}
|
}
|
||||||
public class TiOtmModel4 {
|
public class TiOtmModel4
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
|
|
||||||
@ -818,7 +869,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToMany() {
|
public void Include_OneToMany()
|
||||||
|
{
|
||||||
var model1 = new TiOtmModel1 { m1name = DateTime.Now.Second.ToString() };
|
var model1 = new TiOtmModel1 { m1name = DateTime.Now.Second.ToString() };
|
||||||
model1.id = (int)g.oracle.Insert(model1).ExecuteIdentity();
|
model1.id = (int)g.oracle.Insert(model1).ExecuteIdentity();
|
||||||
var model2 = new TiOtmModel2 { model2id = model1.id, m2setting = DateTime.Now.Second.ToString() };
|
var model2 = new TiOtmModel2 { model2id = model1.id, m2setting = DateTime.Now.Second.ToString() };
|
||||||
@ -873,7 +925,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TiOtmModel11 {
|
public class TiOtmModel11
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int model2id { get; set; }
|
public int model2id { get; set; }
|
||||||
@ -882,13 +935,15 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
public string m1name { get; set; }
|
public string m1name { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TiOtmModel22 {
|
public class TiOtmModel22
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string m2setting { get; set; }
|
public string m2setting { get; set; }
|
||||||
public List<TiOtmModel33> childs { get; set; }
|
public List<TiOtmModel33> childs { get; set; }
|
||||||
}
|
}
|
||||||
public class TiOtmModel33 {
|
public class TiOtmModel33
|
||||||
|
{
|
||||||
[Column(IsIdentity = true)]
|
[Column(IsIdentity = true)]
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int model2Id { get; set; }
|
public int model2Id { get; set; }
|
||||||
@ -896,7 +951,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
public string setting { get; set; }
|
public string setting { get; set; }
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToMany2() {
|
public void Include_OneToMany2()
|
||||||
|
{
|
||||||
string setting = "x";
|
string setting = "x";
|
||||||
var model2 = new TiOtmModel22 { m2setting = DateTime.Now.Second.ToString() };
|
var model2 = new TiOtmModel22 { m2setting = DateTime.Now.Second.ToString() };
|
||||||
model2.id = (int)g.oracle.Insert(model2).ExecuteIdentity();
|
model2.id = (int)g.oracle.Insert(model2).ExecuteIdentity();
|
||||||
@ -926,37 +982,44 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_OneToChilds() {
|
public void Include_OneToChilds()
|
||||||
var tag1 = new Tag {
|
{
|
||||||
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_中国"
|
Name = "test_oneToChilds_01_中国"
|
||||||
};
|
};
|
||||||
tag1.Id = (int)g.oracle.Insert(tag1).ExecuteIdentity();
|
tag1.Id = (int)g.oracle.Insert(tag1).ExecuteIdentity();
|
||||||
var tag1_1 = new Tag {
|
var tag1_1 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag1.Id,
|
Parent_id = tag1.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_北京"
|
Name = "test_oneToChilds_01_北京"
|
||||||
};
|
};
|
||||||
tag1_1.Id = (int)g.oracle.Insert(tag1_1).ExecuteIdentity();
|
tag1_1.Id = (int)g.oracle.Insert(tag1_1).ExecuteIdentity();
|
||||||
var tag1_2 = new Tag {
|
var tag1_2 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag1.Id,
|
Parent_id = tag1.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_01_上海"
|
Name = "test_oneToChilds_01_上海"
|
||||||
};
|
};
|
||||||
tag1_2.Id = (int)g.oracle.Insert(tag1_2).ExecuteIdentity();
|
tag1_2.Id = (int)g.oracle.Insert(tag1_2).ExecuteIdentity();
|
||||||
|
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_美国"
|
Name = "test_oneToChilds_02_美国"
|
||||||
};
|
};
|
||||||
tag2.Id = (int)g.oracle.Insert(tag2).ExecuteIdentity();
|
tag2.Id = (int)g.oracle.Insert(tag2).ExecuteIdentity();
|
||||||
var tag2_1 = new Tag {
|
var tag2_1 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag2.Id,
|
Parent_id = tag2.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_纽约"
|
Name = "test_oneToChilds_02_纽约"
|
||||||
};
|
};
|
||||||
tag2_1.Id = (int)g.oracle.Insert(tag2_1).ExecuteIdentity();
|
tag2_1.Id = (int)g.oracle.Insert(tag2_1).ExecuteIdentity();
|
||||||
var tag2_2 = new Tag {
|
var tag2_2 = new Tag
|
||||||
|
{
|
||||||
Parent_id = tag2.Id,
|
Parent_id = tag2.Id,
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_oneToChilds_02_华盛顿"
|
Name = "test_oneToChilds_02_华盛顿"
|
||||||
@ -1016,37 +1079,44 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Include_ManyToMany() {
|
public void Include_ManyToMany()
|
||||||
|
{
|
||||||
|
|
||||||
var tag1 = new Tag {
|
var tag1 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_01_中国"
|
Name = "test_manytoMany_01_中国"
|
||||||
};
|
};
|
||||||
tag1.Id = (int)g.oracle.Insert(tag1).ExecuteIdentity();
|
tag1.Id = (int)g.oracle.Insert(tag1).ExecuteIdentity();
|
||||||
var tag2 = new Tag {
|
var tag2 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_02_美国"
|
Name = "test_manytoMany_02_美国"
|
||||||
};
|
};
|
||||||
tag2.Id = (int)g.oracle.Insert(tag2).ExecuteIdentity();
|
tag2.Id = (int)g.oracle.Insert(tag2).ExecuteIdentity();
|
||||||
var tag3 = new Tag {
|
var tag3 = new Tag
|
||||||
|
{
|
||||||
Ddd = DateTime.Now.Second,
|
Ddd = DateTime.Now.Second,
|
||||||
Name = "test_manytoMany_03_日本"
|
Name = "test_manytoMany_03_日本"
|
||||||
};
|
};
|
||||||
tag3.Id = (int)g.oracle.Insert(tag3).ExecuteIdentity();
|
tag3.Id = (int)g.oracle.Insert(tag3).ExecuteIdentity();
|
||||||
|
|
||||||
var song1 = new Song {
|
var song1 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_01_我是中国人.mp3",
|
Title = "test_manytoMany_01_我是中国人.mp3",
|
||||||
Url = "http://ww.baidu.com/"
|
Url = "http://ww.baidu.com/"
|
||||||
};
|
};
|
||||||
song1.Id = (int)g.oracle.Insert(song1).ExecuteIdentity();
|
song1.Id = (int)g.oracle.Insert(song1).ExecuteIdentity();
|
||||||
var song2 = new Song {
|
var song2 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_02_爱你一万年.mp3",
|
Title = "test_manytoMany_02_爱你一万年.mp3",
|
||||||
Url = "http://ww.163.com/"
|
Url = "http://ww.163.com/"
|
||||||
};
|
};
|
||||||
song2.Id = (int)g.oracle.Insert(song2).ExecuteIdentity();
|
song2.Id = (int)g.oracle.Insert(song2).ExecuteIdentity();
|
||||||
var song3 = new Song {
|
var song3 = new Song
|
||||||
|
{
|
||||||
Create_time = DateTime.Now,
|
Create_time = DateTime.Now,
|
||||||
Title = "test_manytoMany_03_千年等一回.mp3",
|
Title = "test_manytoMany_03_千年等一回.mp3",
|
||||||
Url = "http://ww.sina.com/"
|
Url = "http://ww.sina.com/"
|
||||||
|
@ -3,12 +3,15 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.Oracle {
|
namespace FreeSql.Tests.Oracle
|
||||||
public class OracleUpdateTest {
|
{
|
||||||
|
public class OracleUpdateTest
|
||||||
|
{
|
||||||
IUpdate<Topic> update => g.oracle.Update<Topic>();
|
IUpdate<Topic> update => g.oracle.Update<Topic>();
|
||||||
|
|
||||||
[Table(Name = "tb_topic")]
|
[Table(Name = "tb_topic")]
|
||||||
class Topic {
|
class Topic
|
||||||
|
{
|
||||||
[Column(IsIdentity = true, IsPrimary = true)]
|
[Column(IsIdentity = true, IsPrimary = true)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int? Clicks { get; set; }
|
public int? Clicks { get; set; }
|
||||||
@ -18,7 +21,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Dywhere() {
|
public void Dywhere()
|
||||||
|
{
|
||||||
Assert.Null(g.oracle.Update<Topic>().ToSql());
|
Assert.Null(g.oracle.Update<Topic>().ToSql());
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test' \r\nWHERE (\"ID\" = 1 OR \"ID\" = 2)", g.oracle.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test' \r\nWHERE (\"ID\" = 1 OR \"ID\" = 2)", g.oracle.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test1' \r\nWHERE (\"ID\" = 1)", g.oracle.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test1' \r\nWHERE (\"ID\" = 1)", g.oracle.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
|
||||||
@ -27,7 +31,8 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SetSource() {
|
public void SetSource()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = :p_0, \"TITLE\" = :p_1, \"CREATETIME\" = :p_2 WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = :p_0, \"TITLE\" = :p_1, \"CREATETIME\" = :p_2 WHERE (\"ID\" = 1)", sql);
|
||||||
|
|
||||||
@ -40,21 +45,24 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = CASE \"ID\" WHEN 1 THEN :p_0 WHEN 2 THEN :p_1 WHEN 3 THEN :p_2 WHEN 4 THEN :p_3 WHEN 5 THEN :p_4 WHEN 6 THEN :p_5 WHEN 7 THEN :p_6 WHEN 8 THEN :p_7 WHEN 9 THEN :p_8 WHEN 10 THEN :p_9 END WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = CASE \"ID\" WHEN 1 THEN :p_0 WHEN 2 THEN :p_1 WHEN 3 THEN :p_2 WHEN 4 THEN :p_3 WHEN 5 THEN :p_4 WHEN 6 THEN :p_5 WHEN 7 THEN :p_6 WHEN 8 THEN :p_7 WHEN 9 THEN :p_8 WHEN 10 THEN :p_9 END WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
|
|
||||||
sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020,1,1)).ToSql().Replace("\r\n", "");
|
sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CREATETIME\" = :p_0 WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CREATETIME\" = :p_0 WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IgnoreColumns() {
|
public void IgnoreColumns()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UpdateColumns() {
|
public void UpdateColumns()
|
||||||
|
{
|
||||||
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).UpdateColumns(a => a.Title).ToSql().Replace("\r\n", "");
|
var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).UpdateColumns(a => a.Title).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Set() {
|
public void Set()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
|
||||||
|
|
||||||
@ -81,12 +89,14 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"ID\" = 10 WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET \"ID\" = 10 WHERE (\"ID\" = 1)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SetRaw() {
|
public void SetRaw()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + :incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + :incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET clicks = clicks + :incrClick WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET clicks = clicks + :incrClick WHERE (\"ID\" = 1)", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Where() {
|
public void Where()
|
||||||
|
{
|
||||||
var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
|
var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
|
||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" = 1)", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" = 1)", sql);
|
||||||
|
|
||||||
@ -103,20 +113,24 @@ namespace FreeSql.Tests.Oracle {
|
|||||||
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WhereExists() {
|
public void WhereExists()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteAffrows() {
|
public void ExecuteAffrows()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ExecuteUpdated() {
|
public void ExecuteUpdated()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AsTable() {
|
public void AsTable()
|
||||||
|
{
|
||||||
Assert.Null(g.oracle.Update<Topic>().ToSql());
|
Assert.Null(g.oracle.Update<Topic>().ToSql());
|
||||||
Assert.Equal("UPDATE \"tb_topicAsTable\" SET title='test' \r\nWHERE (\"ID\" = 1 OR \"ID\" = 2)", g.oracle.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").AsTable(a => "tb_topicAsTable").ToSql());
|
Assert.Equal("UPDATE \"tb_topicAsTable\" SET title='test' \r\nWHERE (\"ID\" = 1 OR \"ID\" = 2)", g.oracle.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").AsTable(a => "tb_topicAsTable").ToSql());
|
||||||
Assert.Equal("UPDATE \"tb_topicAsTable\" SET title='test1' \r\nWHERE (\"ID\" = 1)", g.oracle.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").AsTable(a => "tb_topicAsTable").ToSql());
|
Assert.Equal("UPDATE \"tb_topicAsTable\" SET title='test1' \r\nWHERE (\"ID\" = 1)", g.oracle.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").AsTable(a => "tb_topicAsTable").ToSql());
|
||||||
|
@ -2,9 +2,12 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.OracleMapType {
|
namespace FreeSql.Tests.OracleMapType
|
||||||
public class BoolNullableTest {
|
{
|
||||||
class BoolNullableMap {
|
public class BoolNullableTest
|
||||||
|
{
|
||||||
|
class BoolNullableMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(MapType = typeof(bool))]
|
[Column(MapType = typeof(bool))]
|
||||||
public bool? tobool { get; set; } = true;
|
public bool? tobool { get; set; } = true;
|
||||||
@ -57,7 +60,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
public bool? tostring { get; set; } = true;
|
public bool? tostring { get; set; } = true;
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Bool() {
|
public void Bool()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -138,7 +142,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -219,7 +224,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByteNullable() {
|
public void SByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -300,7 +306,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -381,7 +388,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ShortNullable() {
|
public void ShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -462,7 +470,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -543,7 +552,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IntNullable() {
|
public void IntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -624,7 +634,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -705,7 +716,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LongNullable() {
|
public void LongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -787,7 +799,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -868,7 +881,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteNullable() {
|
public void ByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -949,7 +963,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1030,7 +1045,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShortNullable() {
|
public void UShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1111,7 +1127,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1192,7 +1209,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UIntNullable() {
|
public void UIntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1273,7 +1291,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1354,7 +1373,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolNullableMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULongNullable() {
|
public void ULongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1436,23 +1456,29 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan() {
|
public void TimeSpan()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime() {
|
public void DateTime()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteArray() {
|
public void ByteArray()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void String() {
|
public void String()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolNullableMap { };
|
var item = new BoolNullableMap { };
|
||||||
@ -1534,29 +1560,37 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid() {
|
public void Guid()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPoint() {
|
public void MygisPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisLineString() {
|
public void MygisLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPolygon() {
|
public void MygisPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPoint() {
|
public void MygisMultiPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiLineString() {
|
public void MygisMultiLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPolygon() {
|
public void MygisMultiPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,13 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.OracleMapType {
|
namespace FreeSql.Tests.OracleMapType
|
||||||
public class BoolTest {
|
{
|
||||||
|
public class BoolTest
|
||||||
|
{
|
||||||
|
|
||||||
class BoolMap {
|
class BoolMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
[Column(MapType = typeof(bool?))]
|
[Column(MapType = typeof(bool?))]
|
||||||
public bool toboolnullable { get; set; } = true;
|
public bool toboolnullable { get; set; } = true;
|
||||||
@ -59,7 +62,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BoolNullable() {
|
public void BoolNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -114,7 +118,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByte() {
|
public void SByte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -169,7 +174,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SByteNullable() {
|
public void SByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -224,7 +230,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Short() {
|
public void Short()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -279,7 +286,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ShortNullable() {
|
public void ShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -334,7 +342,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Int() {
|
public void Int()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -389,7 +398,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void IntNullable() {
|
public void IntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -444,7 +454,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Long() {
|
public void Long()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -499,7 +510,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void LongNullable() {
|
public void LongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -555,7 +567,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Byte() {
|
public void Byte()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -610,7 +623,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteNullable() {
|
public void ByteNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -665,7 +679,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShort() {
|
public void UShort()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -720,7 +735,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UShortNullable() {
|
public void UShortNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -775,7 +791,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UInt() {
|
public void UInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -830,7 +847,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void UIntNullable() {
|
public void UIntNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -885,7 +903,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULong() {
|
public void ULong()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -940,7 +959,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<BoolMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ULongNullable() {
|
public void ULongNullable()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -996,23 +1016,29 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpan() {
|
public void TimeSpan()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TimeSpanNullable() {
|
public void TimeSpanNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTime() {
|
public void DateTime()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DateTimeNullable() {
|
public void DateTimeNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ByteArray() {
|
public void ByteArray()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void String() {
|
public void String()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new BoolMap { };
|
var item = new BoolMap { };
|
||||||
@ -1068,29 +1094,37 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Guid() {
|
public void Guid()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GuidNullable() {
|
public void GuidNullable()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPoint() {
|
public void MygisPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisLineString() {
|
public void MygisLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisPolygon() {
|
public void MygisPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPoint() {
|
public void MygisMultiPoint()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiLineString() {
|
public void MygisMultiLineString()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MygisMultiPolygon() {
|
public void MygisMultiPolygon()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,12 @@ using System;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace FreeSql.Tests.OracleMapType {
|
namespace FreeSql.Tests.OracleMapType
|
||||||
public class EnumTest {
|
{
|
||||||
class EnumTestMap {
|
public class EnumTest
|
||||||
|
{
|
||||||
|
class EnumTestMap
|
||||||
|
{
|
||||||
public Guid id { get; set; }
|
public Guid id { get; set; }
|
||||||
|
|
||||||
[Column(MapType = typeof(string))]
|
[Column(MapType = typeof(string))]
|
||||||
@ -20,7 +23,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
public enum ToStringMapEnum { ÖйúÈË, abc, Ïã¸Û }
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumToString() {
|
public void EnumToString()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -76,7 +80,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullableToString() {
|
public void EnumNullableToString()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -136,7 +141,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumToInt() {
|
public void EnumToInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
@ -192,7 +198,8 @@ namespace FreeSql.Tests.OracleMapType {
|
|||||||
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void EnumNullableToInt() {
|
public void EnumNullableToInt()
|
||||||
|
{
|
||||||
//insert
|
//insert
|
||||||
var orm = g.oracle;
|
var orm = g.oracle;
|
||||||
var item = new EnumTestMap { };
|
var item = new EnumTestMap { };
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user