Re[3]: Mapping объектов
От: ili Россия  
Дата: 20.04.09 07:41
Оценка:
Здравствуйте, Dog, Вы писали:

Dog>а можно как-то в виде ?


можно, от чего же нельзя...

давай рассмотрим все на примере того же теста итак, имеем:

// вот у нас класс, с мапингом, размеченым аттрибутами, обратим внимание на то, что имена полей не совпадают с теми что в БД
public class Person
{
    [PrimaryKey]
    [MapField("PersonID")]  public int    ID;
    [MapField("FirstName")] public string FName;
    [MapField("LastName")]  public string LName;
}

[Test]
public void Test()
{
    // вот тут мы делаем выборку из БД
    Person p = (Person)new SqlQuery().SelectByKey(typeof(Person), 1);
    
    // вот тут проверяем, что отмапилось все верно
    Assert.AreEqual(1,        p.ID);
    Assert.AreEqual("John",   p.FName);
    Assert.AreEqual("Pupkin", p.LName);

    // теперь начинается самое интересное
    // 1. создается маппинг схема, новая, зачем, все просто - экстеншены грузятся в схему, где и хранятся
    // пользуя для экстеншенов свою схему, мы как-бы не влиеям на дефолтную
    MappingSchema map = new MappingSchema();

    // 2. вот тут грузятся экстеншены из XML файла
    // что интересно - файл может как лежать "рядом" с приложением, так и быть ембеднутым ресурсом
    // сам файл приведен чуть ниже
    map.Extensions = TypeExtension.GetExtensions("XmlMap.xml");

    // вот тут мы мапим объект к ДатаРоу
    DataRow dr = map.MapObjectToDataRow(p, new DataTable());

    // а вот тут проверяем, что разметка полей _изменилась_ на ту, которую задает экстеншн
    Assert.AreEqual(1,        dr["PERSON_ID"]);
    Assert.AreEqual("John",   dr["FIRST_NAME"]);
    Assert.AreEqual("Pupkin", dr["LAST_NAME"]);
}


а вот собственно наша XML-ка... тут все прозачно до безобразия, комментировать не буду...

<?xml version="1.0" encoding="utf-8" ?> 
  <Types>
   <Type Name="Person">
    <Member Name="ID"    MapField="PERSON_ID" /> 
    <Member Name="FName" MapField="FIRST_NAME" /> 
    <Member Name="LName" MapField="LAST_NAME" /> 
   </Type>
  </Types>


такой экстеншн эквивалентен вот такой разметке аттрибутами:

public class Person
{
    [MapField("PERSON_ID")]  public int    ID;
    [MapField("FIRST_NAME")] public string FName;
    [MapField("LAST_NAME")]  public string LName;
}



все что можно задать в XML-ке задано 2 схемами:
Mapping.xsd — позволяет задать то, что относится к маппингу, имена полей, типы, значения по умолчанию и прочая шняга, в принцыпе оно там прямо так словами и перечислено, аттрибуты совпадают с аттрибутами полей (простите за тафтологию), разобраться достаточно просто
DataAccess.xsd — тут про датааксесс, тэйбл неймы, примари кеи, нон апдейтаблы

посмотрите в тестах *.xml, думаю, после этой короткой вводной разобраться не составит труда, если что — вэлкам, спрашивйте
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.