annotate HowTo/DataAccess/CustomSqlQuery1.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
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 namespace HowTo.DataAccess
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 public class CustomSqlQuery1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public class TestQueryAttribute : /*[a]*/SqlQueryAttribute/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public TestQueryAttribute()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 /*[a]*/IsDynamic = true/*[/a]*/;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public string OracleText { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public string FbText { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public string SQLiteText { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 public /*[a]*/override/*[/a]*/ string /*[a]*/GetSqlText/*[/a]*/(DataAccessor accessor, DbManager dbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 switch (dbManager.DataProvider.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 case "Sql" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 case "Access": return SqlText;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 case "Oracle": return OracleText ?? SqlText;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 case "Fdp" : return FbText ?? SqlText;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 case "SQLite": return SQLiteText ?? SqlText;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 throw new ApplicationException(string.Format("Unknown data provider '{0}'", dbManager.DataProvider.Name));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public abstract class PersonAccessor : DataAccessor
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 [TestQuery(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 /*[a]*/SqlText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = @lastName",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 /*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = :lastName")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 public abstract List<Person> SelectByLastName(string lastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 [TestQuery(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 /*[a]*/SqlText/*[/a]*/ = "SELECT * FROM Person WHERE {0} = @value",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE {0} = :value")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public abstract List<Person> SelectBy([Format] string fieldName, string value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 [TestQuery(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 /*[a]*/SqlText/*[/a]*/ = "SELECT TOP {0} * FROM Person WHERE LastName = @lastName",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 /*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = :lastName AND rownum <= {0}",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 /*[a]*/FbText/*[/a]*/ = "SELECT FIRST {0} * FROM Person WHERE LastName = @lastName",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 /*[a]*/SQLiteText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = @lastName LIMIT {0}")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 public abstract List<Person> SelectByLastName(string lastName, [Format(0)] int top);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 [TestQuery(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 /*[a]*/SqlText/*[/a]*/ = "SELECT @id as PersonID",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 /*[a]*/OracleText/*[/a]*/ = "SELECT :id PersonID FROM Dual",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 /*[a]*/FbText/*[/a]*/ = "SELECT CAST(@id AS INTEGER) PersonID FROM Dual")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public abstract List<Person> SelectID(int @id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public void Test1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 List<Person> list = da.SelectByLastName("Testerson");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 Assert.AreNotEqual(0, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 public void Test2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 List<Person> list = da.SelectBy("FirstName", "John");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 Assert.AreNotEqual(0, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 public void Test3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 List<Person> list = da.SelectByLastName("Testerson", 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 Assert.AreNotEqual(0, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 public void Test4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 List<Person> list = da.SelectID(42);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 Assert.AreEqual(42, list[0].ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 }