using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
namespace FreeSql.Tests
{
public class RepositoryTests
{
///
/// 更一条无法更新。
///
///
[Fact]
public async Task Updatemysql()
{
var item1 = new AddUpdateInfo();
g.mysql.Insert(item1).ExecuteAffrows();
var item2 = new AddUpdateInfo();
g.mysql.Insert(item2).ExecuteAffrows();
var item3 = new AddUpdateInfo();
g.mysql.Insert(item3).ExecuteAffrows();
var repos = g.mysql.GetGuidRepository();
var items = repos.Select.WhereDynamic(new[] { item1, item2, item3 }).ToList();
items[0].Title = "88";
//items[1].Title = "88";
items[2].Title = "88";
int x = await repos.UpdateAsync(items);
}
[Fact]
public void AddUpdate()
{
var repos = g.sqlite.GetGuidRepository();
var item = repos.Insert(new AddUpdateInfo());
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
item = repos.Insert(new AddUpdateInfo { Id = Guid.NewGuid() });
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
item.Title = "xxx";
repos.Update(item);
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
Console.WriteLine(repos.UpdateDiy.Where(a => a.Id == item.Id).Set(a => a.Clicks + 1).ToSql());
repos.UpdateDiy.Where(a => a.Id == item.Id).Set(a => a.Clicks + 1).ExecuteAffrows();
item = repos.Find(item.Id);
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
repos.Orm.Insert(new AddUpdateInfo()).ExecuteAffrows();
repos.Orm.Insert(new AddUpdateInfo { Id = Guid.NewGuid() }).ExecuteAffrows();
repos.Orm.Update().Set(a => a.Title == "xxx").Where(a => a.Id == item.Id).ExecuteAffrows();
item = repos.Orm.Select(item).First();
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
repos.Orm.Delete(item).ExecuteAffrows();
}
[Fact]
public void UpdateAttach()
{
var repos = g.sqlite.GetGuidRepository();
var item = new AddUpdateInfo { Id = Guid.NewGuid() };
repos.Attach(item);
item.Title = "xxx";
repos.Update(item); //这行执行 UPDATE "AddUpdateInfo" SET "Title" = 'xxx' WHERE("Id" = '1942fb53-9700-411d-8895-ce4cecdf3257')
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
repos.Update(item); //这行不执行 SQL,未变化
repos.AttachOnlyPrimary(item).Update(item); //这行更新状态值,只有主键值存在,执行更新 set title = xxx
Console.WriteLine(repos.UpdateDiy.Where(a => a.Id == item.Id).Set(a => a.Clicks + 1).ToSql());
repos.UpdateDiy.Where(a => a.Id == item.Id).Set(a => a.Clicks + 1).ExecuteAffrows();
item = repos.Find(item.Id);
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
}
[Fact]
public void UpdateWhenNotExists()
{
var repos = g.sqlite.GetGuidRepository();
var item = new AddUpdateInfo { Id = Guid.NewGuid() };
item.Title = "xxx";
Assert.Throws(() => repos.Update(item));
}
[Fact]
public void Update()
{
g.sqlite.Insert(new AddUpdateInfo()).ExecuteAffrows();
var repos = g.sqlite.GetGuidRepository();
var item = new AddUpdateInfo { Id = g.sqlite.Select().First().Id };
item.Title = "xxx";
repos.Update(item);
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
}
public class AddUpdateInfo
{
public Guid Id { get; set; }
public string Title { get; set; }
public int Clicks { get; set; } = 10;
}
[Fact]
public void UnitOfWorkRepository()
{
foreach (var fsql in new[] { g.sqlite, /*g.mysql, g.pgsql, g.oracle, g.sqlserver*/ })
{
fsql.CodeFirst.ConfigEntity(f =>
{
f.Property(b => b.UserId).IsPrimary(true);
f.Property(b => b.Id).IsPrimary(true).IsIdentity(true);
f.Property(b => b.Name).IsNullable(false);
});
FlowModel flow = new FlowModel()
{
CreateTime = DateTime.Now,
Name = "aaa",
LastModifyTime = DateTime.Now,
UserId = 1,
};
var flowRepos = fsql.GetRepository();
flowRepos.Insert(flow);
//事务添加
flow = new FlowModel()
{
CreateTime = DateTime.Now,
Name = "aaa",
LastModifyTime = DateTime.Now,
UserId = 1,
};
using (var uow = fsql.CreateUnitOfWork())
{
flowRepos = uow.GetRepository();
flowRepos.Insert(flow);
flowRepos.Orm.Select().ToList();
flowRepos.Orm.Ado.ExecuteConnectTest();
uow.Commit();
}
}
}
[Fact]
public void UnitOfWorkRepositoryWithoutDisable()
{
foreach (var fsql in new[] { g.sqlite, })
{
fsql.CodeFirst.ConfigEntity(f =>
{
f.Property(b => b.UserId).IsPrimary(true);
f.Property(b => b.Id).IsPrimary(true).IsIdentity(true);
f.Property(b => b.Name).IsNullable(false);
});
var flowRepos = fsql.GetRepository();
if (flowRepos.Select.Any(a => a.UserId == 1 && a.Name == "aaa"))
{
flowRepos.Delete(a => a.UserId == 1);
}
var flow = new FlowModel()
{
CreateTime = DateTime.Now,
Name = "aaa",
LastModifyTime = DateTime.Now,
UserId = 1,
};
using (var uow = fsql.CreateUnitOfWork())
{
var uowFlowRepos = uow.GetRepository();
uowFlowRepos.Insert(flow);
uowFlowRepos.Orm.Select().ToList();
//不调用commit将不会提交数据库更改
//uow.Commit();
}
Assert.False(flowRepos.Select.Any(a => a.UserId == 1 && a.Name == "aaa"));
}
}
public partial class FlowModel
{
public int UserId { get; set; }
public int Id { get; set; }
public int? ParentId { get; set; }
public string Name { get; set; }
public DateTime CreateTime { get; set; }
public DateTime LastModifyTime { get; set; }
public string Desc { get; set; }
}
[Fact]
public void AsType()
{
g.sqlite.Insert(new AddUpdateInfo()).ExecuteAffrows();
var repos = g.sqlite.GetGuidRepository