annotate Source/ServiceModel/LinqService.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Globalization;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.ServiceModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Web.Services;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 namespace BLToolkit.ServiceModel
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using Data.Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 [ServiceBehavior (InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [WebService (Namespace = "http://tempuri.org/")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class LinqService : ILinqService
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public LinqService()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public LinqService(string configuration)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 Configuration = configuration;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public string Configuration { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public bool AllowUpdates { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public static Func<string,Type> TypeResolver = _ => null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 public virtual IDataContext CreateDataContext()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 return Settings.CreateDefaultDataContext(Configuration);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 protected virtual void ValidateQuery(LinqServiceQuery query)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 if (AllowUpdates == false && !query.Query.IsSelect)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 throw new LinqException("Insert/Update/Delete requests are not allowed by the service policy.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 protected virtual void HandleException(Exception exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 #region ILinqService Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public Type SqlProviderType { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 [WebMethod]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public virtual string GetSqlProviderType()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 if (SqlProviderType == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 using (var ctx = CreateDataContext())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 SqlProviderType = ctx.CreateSqlProvider().GetType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 return SqlProviderType.FullName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 catch (Exception exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 HandleException(exception);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 throw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 class QueryContext : IQueryContext
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 public SqlQuery SqlQuery { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public object Context { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 public SqlParameter[] Parameters { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public SqlParameter[] GetParameters()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 return Parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 [WebMethod]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 public int ExecuteNonQuery(string queryData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 var query = LinqServiceSerializer.Deserialize(queryData);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 ValidateQuery(query);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 using (var db = CreateDataContext())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 var obj = db.SetQuery(new QueryContext { SqlQuery = query.Query, Parameters = query.Parameters });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 return db.ExecuteNonQuery(obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 catch (Exception exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 HandleException(exception);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 throw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 [WebMethod]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 public object ExecuteScalar(string queryData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 var query = LinqServiceSerializer.Deserialize(queryData);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 ValidateQuery(query);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 using (var db = CreateDataContext())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 var obj = db.SetQuery(new QueryContext { SqlQuery = query.Query, Parameters = query.Parameters });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 return db.ExecuteScalar(obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 catch (Exception exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 HandleException(exception);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 throw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 [WebMethod]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 public string ExecuteReader(string queryData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 var query = LinqServiceSerializer.Deserialize(queryData);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 ValidateQuery(query);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 using (var db = CreateDataContext())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 var obj = db.SetQuery(new QueryContext { SqlQuery = query.Query, Parameters = query.Parameters });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 using (var rd = db.ExecuteReader(obj))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 var ret = new LinqServiceResult
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 QueryID = Guid.NewGuid(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 FieldCount = rd.FieldCount,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 FieldNames = new string[rd.FieldCount],
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 FieldTypes = new Type [rd.FieldCount],
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 Data = new List<string[]>(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 for (var i = 0; i < ret.FieldCount; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 ret.FieldNames[i] = rd.GetName(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 ret.FieldTypes[i] = rd.GetFieldType(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 var varyingTypes = new List<Type>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 while (rd.Read())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 var data = new string [rd.FieldCount];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 var codes = new TypeCode[rd.FieldCount];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 for (var i = 0; i < ret.FieldCount; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 codes[i] = Type.GetTypeCode(ret.FieldTypes[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 ret.RowCount++;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 for (var i = 0; i < ret.FieldCount; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 if (!rd.IsDBNull(i))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 var code = codes[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 var type = rd.GetFieldType(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 var idx = -1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 if (type != ret.FieldTypes[i])
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 code = Type.GetTypeCode(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 idx = varyingTypes.IndexOf(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 if (idx < 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 varyingTypes.Add(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 idx = varyingTypes.Count - 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 switch (code)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 case TypeCode.Decimal : data[i] = rd.GetDecimal (i).ToString(CultureInfo.InvariantCulture); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 case TypeCode.Double : data[i] = rd.GetDouble (i).ToString(CultureInfo.InvariantCulture); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 case TypeCode.Single : data[i] = rd.GetFloat (i).ToString(CultureInfo.InvariantCulture); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 case TypeCode.DateTime : data[i] = rd.GetDateTime(i).ToString("o"); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 default :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 if (type == typeof(DateTimeOffset))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 var dt = rd.GetValue(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 if (dt is DateTime)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 data[i] = ((DateTime)dt).ToString("o");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 else if (dt is DateTimeOffset)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 data[i] = ((DateTimeOffset)dt).ToString("o");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 data[i] = rd.GetValue(i).ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 else if (ret.FieldTypes[i] == typeof(byte[]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 data[i] = Convert.ToBase64String((byte[])rd.GetValue(i));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 data[i] = (rd.GetValue(i) ?? "").ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 if (idx >= 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 data[i] = "\0" + (char)idx + data[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 ret.Data.Add(data);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 ret.VaryingTypes = varyingTypes.ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 return LinqServiceSerializer.Serialize(ret);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 catch (Exception exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 HandleException(exception);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 throw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 [WebMethod]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 public int ExecuteBatch(string queryData)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 var data = LinqServiceSerializer.DeserializeStringArray(queryData);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 var queries = data.Select<string,LinqServiceQuery>(LinqServiceSerializer.Deserialize).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 foreach (var query in queries)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 ValidateQuery(query);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 using (var db = CreateDataContext())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 if (db is DbManager) ((DbManager)db).BeginTransaction();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 foreach (var query in queries)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 var obj = db.SetQuery(new QueryContext { SqlQuery = query.Query, Parameters = query.Parameters });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 db.ExecuteNonQuery(obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 if (db is DbManager) ((DbManager)db).CommitTransaction();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 return queryData.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 catch (Exception exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 HandleException(exception);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 throw;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 }