powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Получить отфильтрованный DBSet<T> в Wramework Entity.
25 сообщений из 27, страница 1 из 2
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709037
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет
Кто знает как сделать? ADO.NET Entity data model создаётся автоматически и содержит свойства, представляющие таблицы бд и позволяющие их редактировать, то есть

Код: c#
1.
DBSet<MyClass> Table1 {get;set;} 



Надо в MyCLass добавить поле, которого нет в Table1, но которое получаем из join Table1 и Table2. При этом надо сохранить возможность insert/update/delete для Table1. Или единственный вариант - хранимые процедуры для insert/update/delete?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709079
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

А почему нужное поле не поместить в Table1 ? Ведь связь между Table1 и Table2 - 1-к-0..1.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709083
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это избыточность данных. Может привести к несогласованности. Такой вариант на крайний случай, хотелось бы обойти его, поэтому ищу вариант который описал в первом посте.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709203
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

Вы о чем? Вы же правите поле руками и пишите что хотите. Какая согласованность?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709489
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И что с того?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709608
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может тогда вообще выкинем всю теорию реляционных баз данных на помойку раз мы всё правим руками и пишем что хотим? И будем лепить всё в кучу.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709613
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisПривет
Кто знает как сделать?

Пока вы не объясните толком что хотите, ничем помочь вам нельзя. Кусок кода давайте, а не какой-то искусственный бред.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709936
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вон gandjustas понял что я хочу.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38709983
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisА вон gandjustas понял что я хочу.
gandjustasrigorMortis,

Вы о чем?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710041
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

Это называется "и рыбку съесть и на *** сесть".

Маппингом можно настроить, чтобы одна сущность собиралась из нескольких таблиц, между которыми есть связь 1-к-0..1.

Но тогда все время будет выполняться такой джоин при получении сущности. Что менее эффективно, чем поместить все поля одной сущности в одну таблицу.

Такое впечатление, что вы сначала проектировали базу, а потом думали о сценариях использования. Увы в таком случае ORM вам вряд ли поможет. В итоге все придет к тому, что вы создадие вьюхи, которые соотвествуют модели данных приложения (а не структуры бд) и сделаете набор процедур. Может быть это будет даже неплохо работать, но все равно не так эффективно, как могло бы.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710136
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gandjustasЭто называется "и рыбку съесть и на *** сесть".

Не вижу связи. Вполне можно организовать, модифицировав EDM класс добавив partial класс к нему.

gandjustasНо тогда все время будет выполняться такой джоин при получении сущности. Что менее эффективно, чем поместить все поля одной сущности в одну таблицу.


А это спорный вопрос. Join будет выполняться медленнее только теоретически. При каких объёмах данных это скажется на производительности - вопрос тестирования. А если поместить это поле добавить в таблицу как вы предлагали, так таблиц таких 5. Если будет косяк данных по этому полю то отловить его будет довольно трудно. И контролировать одно поле в одной таблице проще чем сразу в 5. Ну, вообще, я говорил, это вопрос спорный.

gandjustasТакое впечатление, что вы сначала проектировали базу, а потом думали о сценариях использования. Увы в таком случае ORM вам вряд ли поможет. В итоге все придет к тому, что вы создадие вьюхи, которые соотвествуют модели данных приложения (а не структуры бд) и сделаете набор процедур. Может быть это будет даже неплохо работать, но все равно не так эффективно, как могло бы.
Да, сначала проектировал базу. Не вижу криминала. А у меня впечатление что вы представляете себе проектирование софта как раз построил архитектуру и это навсегда. Я 9 лет в области распределённых систем для мобильного оператора. Если бы всё было так просто...

gandjustasМаппингом можно настроить, чтобы одна сущность собиралась из нескольких таблиц, между которыми есть связь 1-к-0..1.

Насчёт этого поподробнее можно? Вот что у меня:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        
public IQueryable<ProductSet> ProductSetWithUser()
        {
            IQueryable<ProductSet> productSet =
                (from ps in this.ProductSet join p in this.Product on ps.ProductId equals p.Id select ps).Select(
                    item => new ProductSet
                    {
                        Id = item.Id,
                        ProductCount = item.ProductCount,
                        ProductId = item.ProductId,
                        ProductPartId = item.ProductPartId,
                        UserId = item.UserId
                    });

            return productSet;
        }



Но при попытке например получить количество записей того что вернёт этот метод - ошибка:
The entity or complex type 'ProductSet' cannot be constructed in a LINQ to Entities query.

Не пойму что не не так.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710157
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

Не так - древняя весрия EF. Поставьте последнюю.

С маппингом, увы, не подскажу, слишком давно этим занимался и нет желания повторять. Там надо много править XML.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710166
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gandjustas, с последней версией EF 6 та же ошибка.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710444
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В интернете покопал, есть такой вариант, проблема решается:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
                
public IQueryable<ProductSet> ProductSetWithUser
        {
            get
            {
                IQueryable<ProductSet> productSet = from ps in ProductSet join p in Product on ps.ProductId equals p.Id select ps;

                IQueryable<ProductSet> list = productSet.AsEnumerable().Select(psp => new ProductSet
                {
                    Id = psp.Id,
                    ProductCount = psp.ProductCount,
                    ProductId = psp.ProductId,
                    ProductPartId = psp.ProductPartId,
                    UserId = psp.UserId
                }).AsQueryable();

                return list;
            }
        }



Вот только list содержит ProductSet у которого UserId = 0. Но поле UserId в таблице Product не содержит 0 ли null значений. Из-за чего такое может быть?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710450
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis...не содержит 0 ли null значений...

...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710451
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
.
.

откуда берутся эти инопланетяне???
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710458
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не осилили?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710459
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

Я не очень понимаю что ты хочешь в итоге получить, но судя по всему ничего у тебя не выйдет.
Надо или схему\мапинг править, чтобы модель данных соотвествовала сценариям использования или делать кучу dto и мапинги.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710461
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять не попали. Посидел ещё час, вот это работает без проблем:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        
public override IQueryable<ProductSet> Get()
        {
            IQueryable<ProductSet> productSets = _db.ProductSetWithUser.AsEnumerable().Select(item => new ProductSet
            {
                Id = item.Id,
                ProductCount = item.ProductCount,
                ProductId = item.ProductId,
                ProductPartId = item.ProductPartId,
                UserId = item.Product.UserId,
                Product = item.Product,
                ProductPart = item.ProductPart
            }).AsQueryable();

            return productSets;
        }



В итоге получается список ProductSet с дополнительным полем UserId, с которым можно работать как обычно работают с IEnumerable<T>. Вопрос закрыт.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710462
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YouTube Video
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710464
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, молодец, как раз собирался пересмотреть этот сериал, когда-то давно увлекался. Пойду смотреть.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710594
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisВ итоге получается список ProductSet с дополнительным полем UserId, с которым можно работать как обычно работают с IEnumerable<T>. Вопрос закрыт.
*facepalm*

Не знаю что ты пытаешься сделать, но минимум две ошибки уже есть.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710778
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, есть проблема, задал вопрос в соседней ветке.
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710793
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но и это работает, где ошибки?
...
Рейтинг: 0 / 0
Получить отфильтрованный DBSet<T> в Wramework Entity.
    #38710814
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чо та в толк не возьму - а нельзя использовать банально навигационное свойство??
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Получить отфильтрованный DBSet<T> в Wramework Entity.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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