Inheritance: System.Data.DataSet
        public override void Add(Document doc, NorthwindConfig config, ref List<TransactionResult> result)
        {
            List<TransactionResult> transactionResult = new List<TransactionResult>();
            ProductFamilyDocument productFamilyDoc = doc as ProductFamilyDocument;

            #region check input values
            if (productFamilyDoc == null)
            {
                result.Add(doc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_DocumentTypeNotSupported));
                return;
            }
            #endregion

            DataSets.CategoryTableAdapters.CategoriesTableAdapter tableAdapter;

            DataSets.Category category = new DataSets.Category();
            DataSets.Category.CategoriesRow row = category.Categories.NewCategoriesRow();

            #region fill dataset from document
            try
            {

                if (productFamilyDoc.name.IsNull)
                    row.SetCategoryNameNull();
                else
                    row.CategoryName = (string)productFamilyDoc.name.Value;

                if (productFamilyDoc.description.IsNull)
                    row.SetDescriptionNull();
                else
                    row.Description = (string)productFamilyDoc.description.Value;

                row.CreateID = config.SequenceNumber;
                row.CreateUser = config.CrmUser;

                row.ModifyID = config.SequenceNumber;
                row.ModifyUser = config.CrmUser;

            }
            catch (Exception e)
            {
                productFamilyDoc.Id = "";
            #warning Check error message
                result.Add(productFamilyDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, e.ToString()));
                return;
            }

            #endregion

            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {

                    connection.Open();

                    tableAdapter = new DataSets.CategoryTableAdapters.CategoriesTableAdapter();
                    tableAdapter.Connection = connection;

                    category.Categories.AddCategoriesRow(row);
                    tableAdapter.Update(category.Categories);
                    OleDbCommand Cmd = new OleDbCommand("SELECT @@IDENTITY", connection);
                    object lastid = Cmd.ExecuteScalar();
                    productFamilyDoc.Id = ((int)lastid).ToString();

            }
            result.Add(doc.SetTransactionStatus(TransactionStatus.Success));
        }
        public override void Update(Document doc, NorthwindConfig config, ref List<TransactionResult> result)
        {
            List<TransactionResult> transactionResult = new List<TransactionResult>();
            ProductFamilyDocument productFamilyDoc = doc as ProductFamilyDocument;

            #region check input values
            if (productFamilyDoc == null)
            {
                result.Add(doc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_DocumentTypeNotSupported));
                return;
            }

            // check id
            #endregion

            DataSets.CategoryTableAdapters.CategoriesTableAdapter tableAdapter;

            DataSets.Category category = new DataSets.Category();
            DataSets.Category.CategoriesRow row;
            tableAdapter = new DataSets.CategoryTableAdapters.CategoriesTableAdapter();
            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {

                connection.Open();
                tableAdapter.Connection = connection;
                int recordCount = tableAdapter.FillBy(category.Categories, Convert.ToInt32(productFamilyDoc.Id));
                if (recordCount == 0)
                {
                    doc.SetTransactionStatus(TransactionStatus.UnRecoverableError, "Category does not exists");
                    return;
                }
                row = (Category.CategoriesRow)category.Categories.Rows[0];

                try
                {
                    if(!productFamilyDoc.name.NotSet)
                        if (productFamilyDoc.name.IsNull)
                            row.SetCategoryNameNull();
                        else
                            row.CategoryName = (string)productFamilyDoc.name.Value;

                    if(!productFamilyDoc.description.NotSet)
                        if (productFamilyDoc.description.IsNull)
                            row.SetDescriptionNull();
                        else
                            row.Description = (string)productFamilyDoc.description.Value;

                    row.ModifyID = config.SequenceNumber;
                    row.ModifyUser = config.CrmUser;
                }
                catch (Exception e)
                {
                    productFamilyDoc.Id = "";
            #warning Check error message
                    result.Add(productFamilyDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, e.ToString()));
                    return;
                }

                tableAdapter = new DataSets.CategoryTableAdapters.CategoriesTableAdapter();
                tableAdapter.Connection = connection;

                tableAdapter.Update(category.Categories);

                result.Add(doc.SetTransactionStatus(TransactionStatus.Success));

            }
        }
        private Document GetDocument(Category.CategoriesRow row, Token lastToken, NorthwindConfig config)
        {
            #region Declarations
            ProductFamilyDocument doc;
            string id;
            #endregion

            id = row.CategoryID.ToString();

            doc = new ProductFamilyDocument();
            doc.Id = id;

            if (lastToken.InitRequest)
                doc.LogState = LogState.Created;

            else if (row.IsCreateIDNull() || row.IsModifyIDNull()
                || row.IsCreateUserNull() || row.IsModifyUserNull())
                doc.LogState = LogState.Created;

            else if ((row.CreateID > lastToken.SequenceNumber)
                   && (row.CreateUser != config.CrmUser))
                doc.LogState = LogState.Created;

            else if ((row.CreateID == lastToken.SequenceNumber)
                && (row.CreateUser != config.CrmUser)
                && (id.CompareTo(lastToken.Id.Id) > 0))
                doc.LogState = LogState.Created;
            else if ((row.ModifyID >= lastToken.SequenceNumber) && (row.ModifyUser != config.CrmUser))
                doc.LogState = LogState.Updated;

            doc.active.Value = Constants.DefaultValues.Active;
            doc.name.Value = row.IsCategoryNameNull() ? null : row.CategoryName;

            doc.description.Value = row.IsDescriptionNull() ? null : row.Description;

            return doc;
        }
        public override Document GetDocument(Identity identity, Token lastToken, NorthwindConfig config)
        {
            int recordCount;
            Category category = new Category();

            int id = Identity.GetId(identity);

            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {
                CategoriesTableAdapter tableAdapter;
                tableAdapter = new CategoriesTableAdapter();
                tableAdapter.Connection = connection;
                recordCount = tableAdapter.FillBy(category.Categories, id);
            }

            if (recordCount == 0)
                return GetDeletedDocument(identity);

            return GetDocument((Category.CategoriesRow)category.Categories[0], lastToken, config);
        }
        public override List<Identity> GetAll(NorthwindConfig config, string whereExpression, OleDbParameter[] oleDbParameters)
        {
            #region Declarations
            List<Identity> result = new List<Identity>();
            int recordCount = 0;
            Category dataset = new Category();
            #endregion

            // get the first 11 rows of the changelog
            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {
                CategoriesTableAdapter tableAdapter;

                tableAdapter = new CategoriesTableAdapter();

                tableAdapter.Connection = connection;

                if (string.IsNullOrEmpty(whereExpression))
                    recordCount = tableAdapter.Fill(dataset.Categories);
                else
                    recordCount = tableAdapter.FillByWhereClause(dataset.Categories, whereExpression, oleDbParameters);
            }

            foreach (Category.CategoriesRow row in dataset.Categories.Rows)
            {
                // use where expression !!
                result.Add(new Identity(this.EntityName, row.CategoryID.ToString()));
            }

            return result;
        }
        public override int FillChangeLog(out DataTable table, NorthwindConfig config, Token lastToken)
        {
            #region declarations
            Category category;
            int lastId;
            int recordCount;
            #endregion

            category = new Category();

            lastId = Token.GetId(lastToken);

            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {

                ChangeLogTableAdapter tableAdapter;
                tableAdapter = new ChangeLogTableAdapter();
                tableAdapter.Connection = connection;
                // fill the Changelog dataset
                if (lastToken.InitRequest)
                    recordCount = tableAdapter.Fill(category.ChangeLog, lastId, lastToken.SequenceNumber, lastToken.SequenceNumber, "");
                else
                    recordCount = tableAdapter.Fill(category.ChangeLog, lastId, lastToken.SequenceNumber, lastToken.SequenceNumber, config.CrmUser);

            }

            table = category.ChangeLog;
            return recordCount;
        }
 public static System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(System.Xml.Schema.XmlSchemaSet xs) {
     System.Xml.Schema.XmlSchemaComplexType type = new System.Xml.Schema.XmlSchemaComplexType();
     System.Xml.Schema.XmlSchemaSequence sequence = new System.Xml.Schema.XmlSchemaSequence();
     Category ds = new Category();
     xs.Add(ds.GetSchemaSerializable());
     System.Xml.Schema.XmlSchemaAny any1 = new System.Xml.Schema.XmlSchemaAny();
     any1.Namespace = "http://www.w3.org/2001/XMLSchema";
     any1.MinOccurs = new decimal(0);
     any1.MaxOccurs = decimal.MaxValue;
     any1.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax;
     sequence.Items.Add(any1);
     System.Xml.Schema.XmlSchemaAny any2 = new System.Xml.Schema.XmlSchemaAny();
     any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
     any2.MinOccurs = new decimal(1);
     any2.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax;
     sequence.Items.Add(any2);
     System.Xml.Schema.XmlSchemaAttribute attribute1 = new System.Xml.Schema.XmlSchemaAttribute();
     attribute1.Name = "namespace";
     attribute1.FixedValue = ds.Namespace;
     type.Attributes.Add(attribute1);
     System.Xml.Schema.XmlSchemaAttribute attribute2 = new System.Xml.Schema.XmlSchemaAttribute();
     attribute2.Name = "tableTypeName";
     attribute2.FixedValue = "ChangeLogDataTable";
     type.Attributes.Add(attribute2);
     type.Particle = sequence;
     return type;
 }
 public static System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(System.Xml.Schema.XmlSchemaSet xs) {
     Category ds = new Category();
     System.Xml.Schema.XmlSchemaComplexType type = new System.Xml.Schema.XmlSchemaComplexType();
     System.Xml.Schema.XmlSchemaSequence sequence = new System.Xml.Schema.XmlSchemaSequence();
     xs.Add(ds.GetSchemaSerializable());
     System.Xml.Schema.XmlSchemaAny any = new System.Xml.Schema.XmlSchemaAny();
     any.Namespace = ds.Namespace;
     sequence.Items.Add(any);
     type.Particle = sequence;
     return type;
 }