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 } |