Files
zszq-trs/YLErpUnitTest/ExternalLibTests/EntityFrameworkTest .cs
T
2024-05-09 14:06:26 +08:00

108 lines
3.8 KiB
C#

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Linq;
using System.Text;
using YLErp.DBModels;
namespace YLErp.Modules.EntityFrameworkTests
{
[TestClass]
public class EntityFrameworkTest : YLUnitTestBase
{
[TestMethod("测试NULL引用")]
public void TestNullMap()
{
using (var db = DbContextFactory.GetYLDbContext())
{
var query = from t in db.trade
join rr in db.realtime_trade_risk on t.id equals rr.TradeId into rrs
from rr in rrs.DefaultIfEmpty()
where t.id == 1
select new
{
t.id,
pv = rr.Pv
};
var data = query.FirstOrDefault();
Assert.AreEqual(data.pv, null);
}
}
[TestMethod("获取可为空的列如何查询优化")]
public void TestNullableDate()
{
var log1 = new StringBuilder(500);
var log2 = new StringBuilder(500);
var date = DateTime.Today.AddDays(-30);
var predicate = PredicateBuilder.Create<ExchangeListOption>(n => n.MaturityDate > date);
using (var db = DbContextFactory.GetYLDbContext())
{
db.Database.Log = log => log1.AppendLine(log);
var data = db.exchange_list_option.Where(predicate).FirstOrDefault();
}
predicate = PredicateBuilder.Create<ExchangeListOption>(n => n.MaturityDate > date);
using (var db = DbContextFactory.GetYLDbContext())
{
db.Database.Log = log => log2.AppendLine(log);
var data = db.exchange_list_option.Where(predicate).FirstOrDefault();
}
Assert.AreNotEqual(log1.ToString(), log2.ToString());
//这个测试说明了和date类型的列进行比较的时候不会产生null处理,但最好linq中还是要使用value
}
[TestMethod("测试AutoMapper.ProjectTo")]
public void TestAutoMapper()
{
}
[TestMethod("测试复杂对象是否被跟踪")]
public void TestDataProxy()
{
var query = from a in DbContext.valuedate
from b in DbContext.AppConfig
where a.id == 1 && b.PGroup == "ProjectConfig" && b.PName == "Erp.VolMode"
select new
{
a,
b = new AppConfigDto
{
PValue = b.PValue,
CreateTime = b.CreateTime
}
};
var item = query.FirstOrDefault();
var riskFreeRate = item.a.RiskFreeRate;
Assert.IsTrue(DbContext.Entry(item.a).State == System.Data.Entity.EntityState.Unchanged, "测试是否附加1");
item.a.RiskFreeRate = riskFreeRate + 1;
var state = DbContext.Entry(item.a).State;
Assert.IsTrue(state == System.Data.Entity.EntityState.Modified, "测试是否附加2");
var changes = DbContext.SaveChanges();
Assert.IsTrue(changes == 1, "测试是否附加3");
item.a.RiskFreeRate = riskFreeRate;
Assert.IsTrue(DbContext.Entry(item.a).State == System.Data.Entity.EntityState.Modified, "测试是否附加4");
changes = DbContext.SaveChanges();
Assert.IsTrue(changes == 1, "测试是否附加5");
//Assert.IsTrue(DbContext.Entry(item.b).State == System.Data.Entity.EntityState.Detached, "测试是否附加2");
}
}
}