Mercurial > pub > bltoolkit
comparison UnitTests/Linq/Exceptions/Common.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 using System.Collections.Generic; | |
| 3 | |
| 4 using BLToolkit.Common; | |
| 5 using BLToolkit.Data; | |
| 6 using BLToolkit.Data.Linq; | |
| 7 using BLToolkit.Data.Sql; | |
| 8 | |
| 9 using NUnit.Framework; | |
| 10 | |
| 11 namespace Data.Exceptions | |
| 12 { | |
| 13 using Linq; | |
| 14 using Linq.Model; | |
| 15 | |
| 16 [TestFixture] | |
| 17 public class Common : TestBase | |
| 18 { | |
| 19 class MyDbManager : TestDbManager | |
| 20 { | |
| 21 public MyDbManager() : base("Sql2008") {} | |
| 22 | |
| 23 protected override SqlQuery ProcessQuery(SqlQuery sqlQuery) | |
| 24 { | |
| 25 if (sqlQuery.IsInsert && sqlQuery.Insert.Into.Name == "Parent") | |
| 26 { | |
| 27 var expr = | |
| 28 new QueryVisitor().Find(sqlQuery.Insert, e => | |
| 29 { | |
| 30 if (e.ElementType == QueryElementType.SetExpression) | |
| 31 { | |
| 32 var se = (SqlQuery.SetExpression)e; | |
| 33 return ((SqlField)se.Column).Name == "ParentID"; | |
| 34 } | |
| 35 | |
| 36 return false; | |
| 37 }) as SqlQuery.SetExpression; | |
| 38 | |
| 39 if (expr != null) | |
| 40 { | |
| 41 var value = ConvertTo<int>.From(((IValueContainer)expr.Expression).Value); | |
| 42 | |
| 43 if (value == 555) | |
| 44 { | |
| 45 var tableName = "Parent1"; | |
| 46 var dic = new Dictionary<IQueryElement,IQueryElement>(); | |
| 47 | |
| 48 sqlQuery = new QueryVisitor().Convert(sqlQuery, e => | |
| 49 { | |
| 50 if (e.ElementType == QueryElementType.SqlTable) | |
| 51 { | |
| 52 var oldTable = (SqlTable)e; | |
| 53 | |
| 54 if (oldTable.Name == "Parent") | |
| 55 { | |
| 56 var newTable = new SqlTable(oldTable) { Name = tableName, PhysicalName = tableName }; | |
| 57 | |
| 58 foreach (var field in oldTable.Fields.Values) | |
| 59 dic.Add(field, newTable.Fields[field.Name]); | |
| 60 | |
| 61 return newTable; | |
| 62 } | |
| 63 } | |
| 64 | |
| 65 IQueryElement ex; | |
| 66 return dic.TryGetValue(e, out ex) ? ex : null; | |
| 67 }); | |
| 68 } | |
| 69 } | |
| 70 } | |
| 71 | |
| 72 return sqlQuery; | |
| 73 } | |
| 74 } | |
| 75 | |
| 76 [Test, ExpectedException(typeof(DataException), ExpectedMessage = "Invalid object name 'Parent1'.")] | |
| 77 public void ReplaceTableTest([IncludeDataContexts("Sql2008", "Sql2012")] string context) | |
| 78 { | |
| 79 using (var db = new MyDbManager()) | |
| 80 { | |
| 81 var n = 555; | |
| 82 | |
| 83 db.Parent.Insert(() => new Parent | |
| 84 { | |
| 85 ParentID = n, | |
| 86 Value1 = n | |
| 87 }); | |
| 88 | |
| 89 db.Parent.Delete(p => p.ParentID == n); | |
| 90 } | |
| 91 } | |
| 92 } | |
| 93 } |
