Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XAF - как описать вычисляемое поле / 11 сообщений из 11, страница 1 из 1
11.02.2013, 11:27
    #38145671
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
Добрый день.
В табличке есть вычисляемое поле isCurrent
Код: sql
1.
(case when [dDateFrom]<=getdate() AND ([dDateTo] IS NULL OR getdate()<=[dDateTo]) then (1) else (0) end)



Хочу отобразить его в классе XAF. Пишу так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        Boolean fisCurrent;
        [DisplayName("Текущий")]
        [Custom("AllowEdit", "False"), Custom("AllowAdd", "false")]
        public Boolean isCurrent
        {
            get { return fisCurrent; }
            set { SetPropertyValue<Boolean>("isCurrent", ref fisCurrent, value); }
        }



Отображает нормально. Однако, как только хочу добавить новую запись, выдаёт мне сообщение, что программа хочет сделать INSERT в БД значения в это поле. Но поле - то вычисляемое. В него нельзя вставлять. Перепробовал все варианты. Никак не могу подобрать правильный.
...
Рейтинг: 0 / 0
11.02.2013, 12:53
    #38145867
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
1) Вычисляемое NonPersistent поле на клиенте
или
2) Подсунуть свой UnitOfWork, где переопределить GetPropertiesListForUpdateInsert
...
Рейтинг: 0 / 0
11.02.2013, 15:19
    #38146210
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
SerP19831) Вычисляемое NonPersistent поле на клиенте
или
2) Подсунуть свой UnitOfWork, где переопределить GetPropertiesListForUpdateInsert

Пробовал вариант с NonPersistent, почему-то при этом значение поля перестаёт считываться из БД.
...
Рейтинг: 0 / 0
11.02.2013, 15:22
    #38146213
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
Так оно и не должно считываться из БД (на то оно и NonPersistent), пусть себе тихонько на клиенте вычисляется)))
...
Рейтинг: 0 / 0
11.02.2013, 15:25
    #38146220
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
SerP1983Так оно и не должно считываться из БД (на то оно и NonPersistent), пусть себе тихонько на клиенте вычисляется)))
Понятно, значит, использовать БД-шное вычисляемое поле нельзя:)
...
Рейтинг: 0 / 0
11.02.2013, 15:31
    #38146239
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
Ну почему нельзя, можно, если подсунуть свой UnitOfWork. Вы какой ObjectSpaceProvider пользуете? Если надо, как это сделать, скину.
И не по теме вопрос: как вам этот монстр xaf и почему решили на нем что-либо пробовать?
...
Рейтинг: 0 / 0
11.02.2013, 15:46
    #38146275
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
SerP1983,

честно говоря, не знаю, какой ObjectSpaceProvider используется.
Я всего лишь мелкий участник проекта и меня им заставили заниматься только потому, что больше меня занять нечем:))
Ну а монстр, конечно, отвратителен, продуман плохо.
При загрузке приложения начинает проверять все связи объектов, что не есть гуд.
Лучше это делать при открытии объектов непосредственно и 1 раз.
Кроме того, настройки (модель) хранится в текстовых файлах (*.xafml), что создаёт существенные трудности при командной разработке. На мой взгляд, модель проще было пихнуть в служебные таблицы в БД.
...
Рейтинг: 0 / 0
11.02.2013, 16:13
    #38146339
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
WinApplication.cs:
Код: c#
1.
2.
3.
4.
        protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)
        {
            args.ObjectSpaceProvider = new ???
        }
...
Рейтинг: 0 / 0
11.02.2013, 16:31
    #38146394
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
SerP1983WinApplication.cs:
Код: c#
1.
2.
3.
4.
        protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)
        {
            args.ObjectSpaceProvider = new ???
        }



XPObjectSpaceProvider(args.ConnectionString, args.Connection);
...
Рейтинг: 0 / 0
11.02.2013, 16:52
    #38146449
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
Вот как-то так через ж.. Мне повезло, у меня были исходники))
От версии к версии может и не работать.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public class MyObjectSpaceProvider : ObjectSpaceProvider
    {
        public MyObjectSpaceProvider(IXpoDataStoreProvider dataStoreProvider)
            : base(dataStoreProvider)
        {
        }

        protected override IObjectSpace CreateObjectSpaceCore(UnitOfWork unitOfWork, DevExpress.ExpressApp.DC.ITypesInfo typesInfo)
        {
            return base.CreateObjectSpaceCore(new MyUnitOfWork(unitOfWork.DataLayer), typesInfo);
        }
    }

    public class MyUnitOfWork : UnitOfWork
    {
        public MyUnitOfWork(IDataLayer layer, params IDisposable[] disposeOnDisconnect)
            : base(layer, disposeOnDisconnect)
        {
        }

        protected override MemberInfoCollection GetPropertiesListForUpdateInsert(object theObject, bool isUpdate)
        {
            var list = base.GetPropertiesListForUpdateInsert(theObject, isUpdate);

            for (int i = list.Count - 1; i >= 0; i--)
            {
                Func<Attribute, bool> customAttrWhere = x =>
                    x is CustomAttribute
                    && (x as CustomAttribute).Name == "AllowEdit"
                    && (x as CustomAttribute).Value == "false";

                var customAttr = list[i].Attributes.FirstOrDefault(customAttrWhere);

                if (customAttr != null)
                    list.RemoveAt(i);
            }

            return list;
        }
    }



Дальше подсовывайте MyObjectSpaceProvider в методе CreateDefaultObjectSpaceProvider.
...
Рейтинг: 0 / 0
11.02.2013, 17:56
    #38146597
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XAF - как описать вычисляемое поле
SerP1983,

спасибо, если будет вдохновение, попробую куда-нибудь подсунуть.
А так уже сделал, вычисляю поле прямо в клиенте.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XAF - как описать вычисляемое поле / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]