Mercurial > pub > bltoolkit
comparison UnitTests/Linq/Model/NorthwindDB.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 using System.Linq; | |
| 4 using System.Linq.Expressions; | |
| 5 using System.Reflection; | |
| 6 using System.Text; | |
| 7 | |
| 8 using BLToolkit.Data; | |
| 9 using BLToolkit.Data.DataProvider; | |
| 10 using BLToolkit.Data.Linq; | |
| 11 using BLToolkit.Data.Sql; | |
| 12 using BLToolkit.Data.Sql.SqlProvider; | |
| 13 | |
| 14 namespace Data.Linq.Model | |
| 15 { | |
| 16 public class NorthwindDB : DbManager | |
| 17 { | |
| 18 public NorthwindDB() : base("Northwind") | |
| 19 { | |
| 20 } | |
| 21 | |
| 22 public Table<Northwind.Category> Category { get { return GetTable<Northwind.Category>(); } } | |
| 23 public Table<Northwind.Customer> Customer { get { return GetTable<Northwind.Customer>(); } } | |
| 24 public Table<Northwind.Employee> Employee { get { return GetTable<Northwind.Employee>(); } } | |
| 25 public Table<Northwind.EmployeeTerritory> EmployeeTerritory { get { return GetTable<Northwind.EmployeeTerritory>(); } } | |
| 26 public Table<Northwind.OrderDetail> OrderDetail { get { return GetTable<Northwind.OrderDetail>(); } } | |
| 27 public Table<Northwind.Order> Order { get { return GetTable<Northwind.Order>(); } } | |
| 28 public Table<Northwind.Product> Product { get { return GetTable<Northwind.Product>(); } } | |
| 29 public Table<Northwind.ActiveProduct> ActiveProduct { get { return GetTable<Northwind.ActiveProduct>(); } } | |
| 30 public Table<Northwind.DiscontinuedProduct> DiscontinuedProduct { get { return GetTable<Northwind.DiscontinuedProduct>(); } } | |
| 31 public Table<Northwind.Region> Region { get { return GetTable<Northwind.Region>(); } } | |
| 32 public Table<Northwind.Shipper> Shipper { get { return GetTable<Northwind.Shipper>(); } } | |
| 33 public Table<Northwind.Supplier> Supplier { get { return GetTable<Northwind.Supplier>(); } } | |
| 34 public Table<Northwind.Territory> Territory { get { return GetTable<Northwind.Territory>(); } } | |
| 35 | |
| 36 #if !MONO | |
| 37 | |
| 38 public class FreeTextKey<T> | |
| 39 { | |
| 40 public T Key; | |
| 41 public int Rank; | |
| 42 } | |
| 43 | |
| 44 class FreeTextTableExpressionAttribute : TableExpressionAttribute | |
| 45 { | |
| 46 public FreeTextTableExpressionAttribute() | |
| 47 : base("") | |
| 48 { | |
| 49 } | |
| 50 | |
| 51 public override void SetTable(SqlTable table, MemberInfo member, IEnumerable<Expression> expArgs, IEnumerable<ISqlExpression> sqlArgs) | |
| 52 { | |
| 53 var aargs = sqlArgs.ToArray(); | |
| 54 var arr = ConvertArgs(member, aargs).ToList(); | |
| 55 var method = (MethodInfo)member; | |
| 56 var sp = new MsSql2008SqlProvider(); | |
| 57 | |
| 58 { | |
| 59 var ttype = method.GetGenericArguments()[0]; | |
| 60 var tbl = new SqlTable(ttype); | |
| 61 | |
| 62 var database = tbl.Database == null ? null : sp.Convert(tbl.Database, ConvertType.NameToDatabase). ToString(); | |
| 63 var owner = tbl.Owner == null ? null : sp.Convert(tbl.Owner, ConvertType.NameToOwner). ToString(); | |
| 64 var physicalName = tbl.PhysicalName == null ? null : sp.Convert(tbl.PhysicalName, ConvertType.NameToQueryTable).ToString(); | |
| 65 | |
| 66 var name = sp.BuildTableName(new StringBuilder(), database, owner, physicalName); | |
| 67 | |
| 68 arr.Add(new SqlExpression(name.ToString(), Precedence.Primary)); | |
| 69 } | |
| 70 | |
| 71 { | |
| 72 var field = ((ConstantExpression)expArgs.First()).Value; | |
| 73 | |
| 74 if (field is string) | |
| 75 arr[0] = new SqlExpression(field.ToString(), Precedence.Primary); | |
| 76 else if (field is LambdaExpression) | |
| 77 { | |
| 78 var body = ((LambdaExpression)field).Body; | |
| 79 | |
| 80 if (body is MemberExpression) | |
| 81 { | |
| 82 var name = ((MemberExpression)body).Member.Name; | |
| 83 | |
| 84 name = sp.Convert(name, ConvertType.NameToQueryField).ToString(); | |
| 85 | |
| 86 arr[0] = new SqlExpression(name, Precedence.Primary); | |
| 87 } | |
| 88 } | |
| 89 } | |
| 90 | |
| 91 table.SqlTableType = SqlTableType.Expression; | |
| 92 table.Name = "FREETEXTTABLE({6}, {2}, {3}) {1}"; | |
| 93 table.TableArguments = arr.ToArray(); | |
| 94 } | |
| 95 } | |
| 96 | |
| 97 [FreeTextTableExpressionAttribute] | |
| 98 public Table<FreeTextKey<TKey>> FreeTextTable<TTable,TKey>(string field, string text) | |
| 99 { | |
| 100 return GetTable<FreeTextKey<TKey>>( | |
| 101 this, | |
| 102 ((MethodInfo)(MethodBase.GetCurrentMethod())).MakeGenericMethod(typeof(TTable), typeof(TKey)), | |
| 103 field, | |
| 104 text); | |
| 105 } | |
| 106 | |
| 107 [FreeTextTableExpressionAttribute] | |
| 108 public Table<FreeTextKey<TKey>> FreeTextTable<TTable,TKey>(Expression<Func<TTable,string>> fieldSelector, string text) | |
| 109 { | |
| 110 return GetTable<FreeTextKey<TKey>>( | |
| 111 this, | |
| 112 ((MethodInfo)(MethodBase.GetCurrentMethod())).MakeGenericMethod(typeof(TTable), typeof(TKey)), | |
| 113 fieldSelector, | |
| 114 text); | |
| 115 } | |
| 116 | |
| 117 #endif | |
| 118 } | |
| 119 } |
