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