Uzoma Umekwe Ответов: 1

Доступ к данным C# с помощью Dev express XPO


Я только что начал новую роль младшего разработчика, используя C# и Visual Studio 2012. Я только обнаружил, что моя компания использует DevExpress Xpress Persistent Object (ORM) для доступа к данным, когда я присоединился к ним на прошлой неделе. Это ново для меня, и я учился использовать его с помощью веб-сайта документации devExpress
здесь.

Проблема в том, что документация содержит массу информации, которая мне сейчас не нужна, потому что мне нужно что-то, чтобы заставить меня работать как можно скорее. Я потратил много времени на поиск учебников в google, но ничего хорошего не нашел. Кто-нибудь знает какую-нибудь учебную ссылку, которая может помочь мне сразу же создавать проекты с помощью DevExpress XPO?.

Любая помощь или предложения будут высоко оценены.

1 Ответов

Рейтинг:
8

David_Wimbley

Какое-то время я думал о том, чтобы сделать краткое руководство для XPO, поскольку я прошел через то же самое, что и вы. Документация DevExpress хороша, но это тонна информации, которую нужно просеять. На самом деле нет никакого краткого руководства по XPO per-say...может быть, я наконец напишу свою первую статью.

Я собираюсь сделать здесь несколько предположений, например, что вы используете sql server в качестве своего бэкэнда.

Одна вещь, которую следует иметь в виду, если вы делаете это/когда-нибудь начнете использовать XPO с веб-приложениями, вы хотите убедиться, что каждый вызов, который вы делаете с помощью XPO, обернут в using(var uow = new UnitOfWork (), иначе вы получите некоторые неприятные ошибки перекрестной потоковой передачи.

Я использую "YourClassName" в своих примерах. Это будут ваши объекты XPO,которые вы либо создадите с помощью мастера DevExpress ORM, либо создадите вручную.

Если у вас есть еще какие-либо вопросы о xpo, не стесняйтесь обращаться ко мне.

//Initialize your data layer.
            //By default if you don't do this, XPO will try and use an access databse (jet)
            Session session = new Session();
            XpoDefault.DataLayer = XpoDefault.GetDataLayer(MSSqlConnectionProvider.GetConnectionString("YourServerHostnameOrIP", "DB Username", "DB Password", "DB Name"), AutoCreateOption.None);
            XpoDefault.Session = session;

            //Equivalent of SELECT * FROM TableName in SQL
            // YourClassName would be your XPO object (your persistent object)
            using (var uow = new UnitOfWork())
            {
                XPCollection<yourclassname> getRecords = new XPCollection<yourclassname>(uow);

                foreach (var item in getRecords)
                {
                    //Do something with what you got in your XPCollection
                }
            }

            //Equivalent of SELECT * FROM TableName WHERE Id = 1
            using (var uow = new UnitOfWork())
            {
                XPCollection<yourclassname> getSpecificRecord = new XPCollection<yourclassname>(uow, CriteriaOperator.Parse("Id = '1'"));
                //OR

                YourClassName getSingleRec =
                    new XPCollection<yourclassname>(uow, CriteriaOperator.Parse("Id = '1'")).FirstOrDefault();

                //do something with single record from DB
            }

            //Equivalent of SELECT * FROM Table WHERE FileName LIKE '%User%'
            using (var uow = new UnitOfWork())
            {
                XPCollection<yourclassname> getRecords = new XPCollection<yourclassname>(uow, CriteriaOperator.Parse("FileName LIKE '%user%'"));

                foreach (var item in getRecords)
                {
                    //do something with code
                }
            }

            //Equivalent of an Insert Statement in SQL
            using (var uow = new UnitOfWork())
            {
                YourClassName save = new YourClassName(uow);
                save.FieldName = "I am a value to save to Database";
                save.Save();
                uow.CommitChanges();

                //.Save() will persistent your changes to the object but uow.CommitChanges() will save those changes back to the database
            }

            //Equivalent of an Update statement in SQL

            using (var uow = new UnitOfWork())
            {
                YourClassName update = uow.FindObject<yourclassname>(CriteriaOperator.Parse("Id = '1'"));
                update.FieldName = "Update To New Value";
                update.Save();
                uow.CommitChanges();
            }
</yourclassname></yourclassname></yourclassname></yourclassname></yourclassname></yourclassname></yourclassname></yourclassname>


Uzoma Umekwe

David_Wimbley ваш учебник был действительно полезен. Моя уверенность в использовании XPO постепенно растет.Всякий раз, когда мне понадобится прикосновение профессионала к моему коду, я всегда буду кричать вам. :) Большое спасибо.

Member 10339087

Как мы используем для соединения двух таблиц??

David_Wimbley

Вы можете просто загрузить две таблицы в XPCollections, а затем с помощью linq выполнить соединение таким образом.

Другой вариант-прямой sql-запрос с использованием XPO.

Но есть способ сделать это, который, скорее всего, хорошо документирован на досках объявлений и форумах devexpress.

RomanRapido

Как вы применяете этот код в XAF? Спасибо!

David_Wimbley

Я не знаком с XAF, и когда я ответил, что это был последний раз, когда я действительно использовал XPO...я перешел на entity framework, так что, боюсь, я не смогу вам сильно помочь.

Есть ли у вас код в XAF, которым вы можете поделиться? Я уверен, что если вы можете получить доступ к коду, вы можете массировать ответ в свой код XAF.