Mercurial > pub > bltoolkit
diff HowTo/DataAccess/ExecuteDictionary.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HowTo/DataAccess/ExecuteDictionary.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; + +using NUnit.Framework; + +using BLToolkit.Common; +using BLToolkit.DataAccess; +using BLToolkit.Mapping; + +namespace HowTo.DataAccess +{ + [TestFixture] + public class ExecuteDictionary1 + { + public class Person + { + [MapField("PersonID"), /*[a]*/PrimaryKey/*[/a]*/] + public int /*[a]*/ID/*[/a]*/; + + public string LastName; + public string FirstName; + public string MiddleName; + } + + public abstract class /*[a]*/PersonAccessor/*[/a]*/ : /*[a]*/DataAccessor/*[/a]*/<Person> + { + // This method uses Person class primary key information. + // + [ActionName("SelectAll")] + public abstract /*[a]*/Dictionary<int,Person>/*[/a]*/ GetPersonDictionary1(); + + // Define index field explicitly. "ID" is a field name of the Person class. + // + [ActionName("SelectAll")] + [/*[a]*/Index("ID")/*[/a]*/] + public abstract /*[a]*/Dictionary<int,Person>/*[/a]*/ GetPersonDictionary2(); + + // Define index field explicitly. "@PersonID" is a recordset field. + // Note that the '@' symbol enforces the library to read index value + // from recordset (not from object). + // + [ActionName("SelectAll")] + [/*[a]*/Index("@PersonID")/*[/a]*/] + public abstract /*[a]*/Dictionary<int,Person>/*[/a]*/ GetPersonDictionary3(); + + // This method reads a dictionary containing scalar values. + // + [SqlQuery("SELECT PersonID, FirstName FROM Person")] + [/*[a]*/Index("PersonID")/*[/a]*/] + [/*[a]*/ScalarFieldName("FirstName")/*[/a]*/] + public abstract /*[a]*/Dictionary<int,string>/*[/a]*/ GetPersonNameDictionary(); + } + + [Test] + public void Test() + { + PersonAccessor pa = DataAccessor.CreateInstance<PersonAccessor>(); + + // ExecuteDictionary. + // + Dictionary<int,Person> dic; + + dic = pa.GetPersonDictionary1(); + dic = pa.GetPersonDictionary2(); + dic = pa.GetPersonDictionary3(); + + foreach (int id in dic.Keys) + Console.WriteLine("{0}: {1} {2}", id, dic[id].FirstName, dic[id].LastName); + + // ExecuteScalarDictionary. + // + Dictionary<int,string> sdic = pa.GetPersonNameDictionary(); + + foreach (int id in dic.Keys) + Console.WriteLine("{0}: {1}", id, sdic[id]); + } + } + + [TestFixture] + public class ExecuteDictionary2 + { + // This example demonstrates how to use a multiple field key. + // + public class Person + { + [/*[a]*/PrimaryKey(1)/*[/a]*/, MapField("PersonID")] + public int ID; + [/*[a]*/PrimaryKey(2)/*[/a]*/] + public string LastName; + + public string FirstName; + public string MiddleName; + } + + public abstract class /*[a]*/PersonAccessor/*[/a]*/ : /*[a]*/DataAccessor/*[/a]*/<Person> + { + // This method uses Person class primary key information. + // Note that the key type of the dictionary must be of /*[a]*/IndexValue/*[/a]*/ type. + // It is required if the index consists of more than one element. + // + [ActionName("SelectAll")] + public abstract /*[a]*/Dictionary<CompoundValue,Person>/*[/a]*/ GetPersonDictionary(); + + // This method reads a dictionary containing scalar values. + // + [SqlQuery("SELECT PersonID, LastName, FirstName FROM Person")] + [/*[a]*/Index("PersonID", "LastName")/*[/a]*/] + [/*[a]*/ScalarFieldName("FirstName")/*[/a]*/] + public abstract /*[a]*/Dictionary<CompoundValue,string>/*[/a]*/ GetPersonNameDictionary(); + } + + [Test] + public void Test() + { + PersonAccessor pa = DataAccessor.CreateInstance<PersonAccessor>(); + + // ExecuteDictionary. + // + Dictionary<CompoundValue,Person> dic = pa.GetPersonDictionary(); + + foreach (CompoundValue idx in dic.Keys) + Console.WriteLine("{0}: {1} {2}", dic[idx].ID, dic[idx].FirstName, dic[idx].LastName); + + // ExecuteScalarDictionary. + // + Dictionary<CompoundValue,string> sdic = pa.GetPersonNameDictionary(); + + string firstName = sdic[new CompoundValue(2, "Testerson")]; + + Assert.AreEqual("Tester", firstName); + } + } +}