Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Проблемы с реализацией XML-схемы и состояния


Автор: Нов 19.8.2008, 09:40
 Доброго времени суток. Возникла проблема, может кто сталкивался... 
   Суть проблемы - есть XML-схема, на основе которой строиться DataSet с двумя DataTable (Department, Employee). 
 Таблицы связаны вот так:

Код

 </xs:complexType>
    <xs:key name="DepartmentKey1" msdata:PrimaryKey="true">
      <xs:selector xpath="." />
      <xs:field xpath="mstns:DepID" />
    </xs:key>
    <xs:key name="DepartmentKey2" msdata:PrimaryKey="true">
      <xs:selector xpath=".//mstns:Employes" />
      <xs:field xpath="mstns:EmployeeID" />
    </xs:key>
  </xs:element>

  И тут ньюанс - добавление во второую таблицу должно идти строго по IDDepartment. Таблицы связаны с GridView-ми, ADO сохранен в состоянии, 
Код

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                NewD = new DataSet();
                Session["Dataset"] = NewD;                
                NewD.ReadXmlSchema("Departments.xsd");
            }
            GridViewDataBind();
        }

        private void GridViewDataBind()
        {
            NewD = Session["Dataset"] as DataSet;
            NewD.Clear();

            NewD.ReadXml("test.xml", XmlReadMode.Auto);
            GridViewDepartament.DataSource = NewD.Tables["Department"];

            GridViewEmployee.DataSource = NewD.Tables["Employes"];
            GridViewEmployee.DataBind();
            GridViewDepartament.DataBind();
            Session["Dataset"] = NewD;
     }

И вот тут проблема. С каждым обращением к клиенту ключевые поля (см {XML} начинают прыгать. Т.е. по загрузке было 3 записи.
Их ID
 При           После любого
первом      обращения
запуске      к серверу
 -0                -3
 -1                -4
 -2                -5

Я понимаю, что тут проблема состояния, но с какой стороны к ней подойти  smile 
Буду благодарен за помощь, в том числе и указание, в какую сторону двигаться. 

 

Автор: Idsa 19.8.2008, 14:37
Думаю, DataSet здесь непричем. Такое ощущение, что в базе есть какой-то хитрый тригер.
И еще странно, что ID растут в отрицательную сторону.

Автор: Нов 19.8.2008, 19:16
Цитата(Idsa @ 19.8.2008,  14:37)
Думаю, DataSet здесь непричем. Такое ощущение, что в базе есть какой-то хитрый тригер.
И еще странно, что ID растут в отрицательную сторону.

 smile  smile 
Цитата

Думаю, DataSet здесь непричем.

DataSet реализован на основе ХМL схемы. И не зависит от БД.
Вот она(схема) целиком. 

Код

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Departments" targetNamespace="http://tempuri.org/Departments.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/Departments.xsd" xmlns:mstns="http://tempuri.org/Departments.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Department">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="DepID" type="xs:unsignedInt" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="0" msdata:AutoIncrementStep="1" />
        <xs:element name="DepN" type="xs:unsignedInt" />
        <xs:element name="DepShortName" type="xs:string" />
        <xs:element name="DepName" type="xs:string" />
        <xs:element name="EMail" type="xs:string" />
        <xs:element name="DepPlannedN" type="xs:unsignedInt" />
        <xs:element name="Employes" type="Employee" />
      </xs:sequence>
    </xs:complexType>
    <xs:key name="DepartmentKey1" msdata:PrimaryKey="true">
      <xs:selector xpath="." />
      <xs:field xpath="mstns:DepID" />
    </xs:key>
    <xs:key name="DepartmentKey2" msdata:PrimaryKey="true">
      <xs:selector xpath=".//mstns:Employes" />
      <xs:field xpath="mstns:EmployeeID" />
    </xs:key>
  </xs:element>

  <xs:complexType name="Employee">
    <xs:sequence>
      <xs:element name="EmployeeID" type="xs:unsignedInt" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="0" msdata:AutoIncrementStep="1" nillable="false" />
      <xs:element name="FirstName" type="xs:string" />
      <xs:element name="LastName" type="xs:string" />
      <xs:element name="EMail" type="xs:string" />
      <xs:element name="BirthDate" type="xs:date" />
      <xs:element name="Citizenship" type="xs:boolean" />
      <xs:element name="PhoneNumber" type="xs:string" />
      <xs:element name="Sex" type="xs:string" />
      <xs:element name="InsuranceNumber" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Жирным я выделил участок, отвечающий за связь таблиц, автоинкремент которого и совершает такие скачки. Впрочем остальные автоинкременты по ключевым полям тоже растут со скачками. 

Цитата

Такое ощущение, что в базе есть какой-то хитрый тригер.

Тут нет базы - запись(чтение) идут в XML файл. 

Цитата

И еще странно, что ID растут в отрицательную сторону.

 smile 
В этом моя вина. Это я их так и обозначил... в жизни они растут в положительную сторону. 

Спасибо за ответ. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)