Mercurial > pub > bltoolkit
diff UnitTests/Linq/ProviderSpecific/Oracle.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UnitTests/Linq/ProviderSpecific/Oracle.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,163 @@ +using System; +using System.Data.Linq.Mapping; +using System.Linq; + +using BLToolkit.Data; +using BLToolkit.Data.DataProvider; +using BLToolkit.Data.Linq; +using BLToolkit.DataAccess; +using BLToolkit.Mapping; + +using NUnit.Framework; + +using UnitTests.Linq.Interface.Model; + +namespace Data.Linq.ProviderSpecific +{ + using Model; + + [TestFixture, Category("Oracle")] + public class Oracle : TestBase + { + #region Sequence + + [Test] + public void SequenceInsert([IncludeDataContexts("Oracle")] string context) + { + using (var db = new TestDbManager(context)) + { + db.GetTable<OracleSpecific.SequenceTest>().Where(_ => _.Value == "SeqValue").Delete(); + db.Insert(new OracleSpecific.SequenceTest { Value = "SeqValue" }); + + var id = db.GetTable<OracleSpecific.SequenceTest>().Single(_ => _.Value == "SeqValue").ID; + + db.GetTable<OracleSpecific.SequenceTest>().Where(_ => _.ID == id).Delete(); + + Assert.AreEqual(0, db.GetTable<OracleSpecific.SequenceTest>().Count(_ => _.Value == "SeqValue")); + } + } + + [Test] + public void SequenceInsertWithIdentity([IncludeDataContexts("Oracle")] string context) + { + using (var db = new TestDbManager(context)) + { + db.GetTable<OracleSpecific.SequenceTest>().Where(_ => _.Value == "SeqValue").Delete(); + + var id1 = Convert.ToInt32(db.InsertWithIdentity(new OracleSpecific.SequenceTest { Value = "SeqValue" })); + var id2 = db.GetTable<OracleSpecific.SequenceTest>().Single(_ => _.Value == "SeqValue").ID; + + Assert.AreEqual(id1, id2); + + db.GetTable<OracleSpecific.SequenceTest>().Where(_ => _.ID == id1).Delete(); + + Assert.AreEqual(0, db.GetTable<OracleSpecific.SequenceTest>().Count(_ => _.Value == "SeqValue")); + } + } + + #endregion + + #region InsertBatch + + [Table(Name = "stg_trade_information")] + public class Trade + { + [MapField("STG_TRADE_ID")] public int ID { get; set; } + [MapField("STG_TRADE_VERSION")] public int Version { get; set; } + [MapField("INFORMATION_TYPE_ID")] public int TypeID { get; set; } + [MapField("INFORMATION_TYPE_NAME")] public string TypeName { get; set; } + [MapField("value")] public string Value { get; set; } + [MapField("value_as_integer")] public int? ValueAsInteger { get; set; } + [MapField("value_as_date")] public DateTime? ValueAsDate { get; set; } + } + + [Test] + public void InsertBatch1([IncludeDataContexts("Oracle")] string context) + { + var data = new[] + { + new Trade { ID = 375, Version = 1, TypeID = 20224, TypeName = "Gas Month", }, + new Trade { ID = 328, Version = 1, TypeID = 20224, TypeName = "Gas Month", }, + new Trade { ID = 348, Version = 1, TypeID = 20224, TypeName = "Gas Month", }, + new Trade { ID = 357, Version = 1, TypeID = 20224, TypeName = "Gas Month", }, + new Trade { ID = 371, Version = 1, TypeID = 20224, TypeName = "Gas Month", }, + new Trade { ID = 333, Version = 1, TypeID = 20224, TypeName = "Gas Month", ValueAsInteger = 1, ValueAsDate = new DateTime(2011, 1, 5) }, + new Trade { ID = 353, Version = 1, TypeID = 20224, TypeName = "Gas Month", ValueAsInteger = 1000000000, }, + new Trade { ID = 973, Version = 1, TypeID = 20160, TypeName = "EU Allowances", }, + }; + + using (var db = new TestDbManager(context)) + { + db.InsertBatch(5, data); + } + } + + [Test] + public void InsertBatch2([IncludeDataContexts("Oracle")] string context) + { + using (var db = new TestDbManager(context)) + { + db.Types2.Delete(_ => _.ID > 1000); + + db.InsertBatch(2, new[] + { + new LinqDataTypes2 { ID = 1003, MoneyValue = 0m, DateTimeValue = null, BoolValue = true, GuidValue = new Guid("ef129165-6ffe-4df9-bb6b-bb16e413c883"), SmallIntValue = null, IntValue = null }, + new LinqDataTypes2 { ID = 1004, MoneyValue = 0m, DateTimeValue = DateTime.Now, BoolValue = false, GuidValue = null, SmallIntValue = 2, IntValue = 1532334 }, + new LinqDataTypes2 { ID = 1005, MoneyValue = 1m, DateTimeValue = DateTime.Now, BoolValue = false, GuidValue = null, SmallIntValue = 5, IntValue = null }, + new LinqDataTypes2 { ID = 1006, MoneyValue = 2m, DateTimeValue = DateTime.Now, BoolValue = false, GuidValue = null, SmallIntValue = 6, IntValue = 153 }, + }); + + db.Types2.Delete(_ => _.ID > 1000); + } + } + + #endregion + + #region Transaction + + [TableName("demo_product_info")] + public new class Product + { + [MapField("PRODUCT_ID"), PrimaryKey, NonUpdatable] + public int Id; + + [MapField("PRODUCT_NAME")] + public string Name; + + [MapField("PRODUCT_DESCRIPTION")] + public string Description; + } + + public abstract class ProductEntityAccesor : DataAccessor<Product> + { + public abstract int Insert(Product product); + public abstract void Delete(int id); + public abstract Product SelectByKey(int id); + public abstract Product SelectByKey(DbManager db, int id); + } + + //[Test] + public void CanInsertProductWithAccessorTest([IncludeDataContexts("Oracle")] string context) + { + using (var dbManager = new TestDbManager(context)) + { + var productEntityAccesor = DataAccessor.CreateInstance<ProductEntityAccesor>(dbManager); + + productEntityAccesor.BeginTransaction(); + + var id = productEntityAccesor.Insert(new Product { Name = "product name test", Description = "product description test" }); + //This assert fails bacause id == 0 and it does not insert until the CommitTransaction is called. + Assert.AreNotEqual(0, id); + + Product product = productEntityAccesor.SelectByKey(id); + Assert.IsNotNull(product); + + productEntityAccesor.Delete(id); + + productEntityAccesor.CommitTransaction(); + } + } + + #endregion + } +}