Я ищу лучший способ использования предложения .Include Entity Framework. Я хочу избежать дублирования кода.
У меня много классов, и у каждого класса есть метод, который выглядит примерно так:
query = (from n in currentDBContext.FBBuchungenCollection
.Include(x => x.BelegHerkunft)
.Include(x => x.Buchungsordner)
.Include(x => x.Buchungsperiode).ThenInclude(x => x.Geschaeftsjahr)
.Include(x => x.BuchungsUser)
.Include(x => x.Erfassungsart)
.Include(x => x.ErstellUser)
.Include(x => x.Mandant).ThenInclude(x => x.HauptAdresse)
.Include(x => x.StornoUser)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.FremdWaehrung)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KKArt)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KKKonto)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.Konto)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KoReVerteilung).ThenInclude(x => x.Periodenverteilungen).ThenInclude(x => x.Kontierungen).ThenInclude(x => x.Kontierungsangaben).ThenInclude(x => x.KontierungsangabenKTR).ThenInclude(x => x.Kostentraeger)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KoReVerteilung).ThenInclude(x => x.Periodenverteilungen).ThenInclude(x => x.Kontierungen).ThenInclude(x => x.Kontierungsangaben).ThenInclude(x => x.KontierungsangabenKTR).ThenInclude(x => x.KostentraegerArt)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Kostenstelle)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Kostentraeger)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Mandant)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Sachkonto)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.Steuerschluessel)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.VerweisTeilbuchung)
select n);
Пример другого класса:
query = (from n in currentDBContext.KKKontoCollection
.TagWith("KKKonto.BuildQuery")
.Include(x => x.Mandant).ThenInclude(x => x.HauptAdresse)
.Include(x => x.KKArt)
.Include(x => x.Land)
.Include(x => x.Mahnkategorie)
.Include(x => x.SammelKonto)
.Include(x => x.Zahlungsbedingung)
select n);
Вы можете видеть, что некоторые включения равны, в данном случае строка:
.Include(x => x.Mandant).ThenInclude(x => x.HauptAdresse)
Есть ли способ избежать этого? Что мне нужно, так это своего рода AddIncludeMandant(), который я могу использовать в каждом классе, которому это нужно?
Привет, Карстен
Изменить:
Я нашел другой синтаксис с помощью GithubCopilot, для меня это выглядит более удобным и читабельным, что вы скажете:
query = currentDBContext.ActivityCollection.AsQueryable();
var includePaths = new[]
{
"Kategorie",
"Typ",
"Mandant",
"BLOB",
// User mit Ansprechpartner -> Kontakt
"User.Ansprechpartner.Kontakt",
// Kontakte -> PersonOrgaHH mit mehreren Unterobjekten
"Kontakte.PersonOrgaHH.Adresse",
"Kontakte.PersonOrgaHH.Organisation",
"Kontakte.PersonOrgaHH.Haushalt",
"Kontakte.PersonOrgaHH.Kontakt",
"Kontakte.PersonOrgaHH.Ansprechpartner",
// weitere Sammlungen
"Foerderungen.Foerderung",
"Stiftungen.Stiftung",
"Gremien.Gremium",
"Sitzungen.Sitzung",
"FundraisingProdukte.FundraisingProdukt",
"Zuwendungen.Zuwendung.PersonOrgaHH"
};
foreach (var path in includePaths)
{
query = query.Include(path);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... lude-in-ef
Ищете лучший способ использования «.Include» в EF ⇐ C#
Место общения программистов C#
-
Anonymous
1761649251
Anonymous
Я ищу лучший способ использования предложения .Include Entity Framework. Я хочу избежать дублирования кода.
У меня много классов, и у каждого класса есть метод, который выглядит примерно так:
query = (from n in currentDBContext.FBBuchungenCollection
.Include(x => x.BelegHerkunft)
.Include(x => x.Buchungsordner)
.Include(x => x.Buchungsperiode).ThenInclude(x => x.Geschaeftsjahr)
.Include(x => x.BuchungsUser)
.Include(x => x.Erfassungsart)
.Include(x => x.ErstellUser)
.Include(x => x.Mandant).ThenInclude(x => x.HauptAdresse)
.Include(x => x.StornoUser)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.FremdWaehrung)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KKArt)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KKKonto)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.Konto)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KoReVerteilung).ThenInclude(x => x.Periodenverteilungen).ThenInclude(x => x.Kontierungen).ThenInclude(x => x.Kontierungsangaben).ThenInclude(x => x.KontierungsangabenKTR).ThenInclude(x => x.Kostentraeger)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.KoReVerteilung).ThenInclude(x => x.Periodenverteilungen).ThenInclude(x => x.Kontierungen).ThenInclude(x => x.Kontierungsangaben).ThenInclude(x => x.KontierungsangabenKTR).ThenInclude(x => x.KostentraegerArt)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Kostenstelle)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Kostentraeger)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Mandant)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.OffenerPosten).ThenInclude(x => x.Sachkonto)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.Steuerschluessel)
.Include(x => x.Teilbuchungen).ThenInclude(x => x.VerweisTeilbuchung)
select n);
Пример другого класса:
query = (from n in currentDBContext.KKKontoCollection
.TagWith("KKKonto.BuildQuery")
.Include(x => x.Mandant).ThenInclude(x => x.HauptAdresse)
.Include(x => x.KKArt)
.Include(x => x.Land)
.Include(x => x.Mahnkategorie)
.Include(x => x.SammelKonto)
.Include(x => x.Zahlungsbedingung)
select n);
Вы можете видеть, что некоторые включения равны, в данном случае строка:
.Include(x => x.Mandant).ThenInclude(x => x.HauptAdresse)
Есть ли способ избежать этого? Что мне нужно, так это своего рода AddIncludeMandant(), который я могу использовать в каждом классе, которому это нужно?
Привет, Карстен
Изменить:
Я нашел другой синтаксис с помощью GithubCopilot, для меня это выглядит более удобным и читабельным, что вы скажете:
query = currentDBContext.ActivityCollection.AsQueryable();
var includePaths = new[]
{
"Kategorie",
"Typ",
"Mandant",
"BLOB",
// User mit Ansprechpartner -> Kontakt
"User.Ansprechpartner.Kontakt",
// Kontakte -> PersonOrgaHH mit mehreren Unterobjekten
"Kontakte.PersonOrgaHH.Adresse",
"Kontakte.PersonOrgaHH.Organisation",
"Kontakte.PersonOrgaHH.Haushalt",
"Kontakte.PersonOrgaHH.Kontakt",
"Kontakte.PersonOrgaHH.Ansprechpartner",
// weitere Sammlungen
"Foerderungen.Foerderung",
"Stiftungen.Stiftung",
"Gremien.Gremium",
"Sitzungen.Sitzung",
"FundraisingProdukte.FundraisingProdukt",
"Zuwendungen.Zuwendung.PersonOrgaHH"
};
foreach (var path in includePaths)
{
query = query.Include(path);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79802517/looking-for-a-better-way-using-include-in-ef[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия