반응형
Mariadb에서 EntityFrameworkCore를 사용하여 재귀 SQL을 실행할 때 오류 발생
Entity Framewear Core(.NET 7)에서 다음을 사용/구축하는 방법에 대한 도움말이 필요합니다.
그 중에서, 저는 다음과 같은 한 가지 수업이 있습니다.
public class ApplicationModel{
public int Id { get; set; }
public string AppName { get; set; }
public List<ApplicationModel>? Parent { get; set; }
public List<ApplicationModel>? Son { get; set; }
}
이러한 반사적 관계는 두 개의 테이블을 생성합니다(MariaDb/Pomelo 7.0.0-silver.1 사용).
- 테이블 응용 프로그램 모델
- 테이블 응용 프로그램 모델 응용 프로그램 모델
목표는 재귀적 SQL을 실행하여 부모 대 아들 관계를 보여주는 트리를 만드는 것입니다.
스키마 및 쿼리의 예를 여기에서 찾으십시오.
결과를 보면 다음과 같은 것을 알 수 있습니다.
- A는 B의 부모이고,
- B는 C와 D의 부모입니다.
- D는 E 등의 부모입니다.
질문: Service.cs 에서 어떻게 코딩할 수 있습니까?
저는 mariadb 프로시저(이름 GET_Dependencies, HeidiSql에서 제대로 작동)를 만들려고 노력했지만, 제 Service.cs 에서,
var result = await _dbContext.ApplicationModels
.FromSqlInterpolated(
$"CALL `GET_DEPENDENCIES` (1)")
.ToListAsync();
다음 오류가 발생했습니다.
System.ArgumentException: An item with the same key has already been added. Key: AppName
at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at Microsoft.EntityFrameworkCore.Query.Internal.FromSqlQueryingEnumerable`1.BuildIndexMap(IReadOnlyList`1 columnNames, DbDataReader dataReader)
at Microsoft.EntityFrameworkCore.Query.Internal.FromSqlQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
at Microsoft.EntityFrameworkCore.Query.Internal.FromSqlQueryingEnumerable`1.Enumerator.<>c.<MoveNext>b__21_0(DbContext _, Enumerator enumerator)
at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.Query.Internal.FromSqlQueryingEnumerable`1.Enumerator.MoveNext()
누가 절차를 사용하여 어떻게 하는지 안내해 주시겠습니까?
안부 전해요,
알겠습니다! (아마 더 좋은 방법은 아닐 것입니다)
필요한 정확한 dto를 만들었습니다.
public class AppDepDto
{
public string Parent { get; set; }
public string Son { get; set; }
}
dbContext.cs 에서, 저는 광고 세트를 추가했습니다.
public DbSet<AppDepDto> AppDepDtos { get; set; }
OnModel에 키가 없다는 사실을 추가해야 했습니다. (링크)
builder
.Entity<AppDepDto>(
eb =>
{
eb.HasNoKey();
});
마지막으로, 저의 서비스는 다음과 같습니다.
public async Task<List<AppDepDto>> GetApplicationDependenciesAsync(int id)
{
var liste = await _dbContext.AppDepDtos
.FromSqlInterpolated($"CALL GET_DEPENDENCIES(1)")
.ToListAsync();
return liste;
}
결과:
[ {
"parent": "A",
"son": "B" }, {
"parent": "B",
"son": "C" }, {
"parent": "B",
"son": "D" }, {
"parent": "D",
"son": "E" } ]
언급URL : https://stackoverflow.com/questions/75235864/error-when-running-a-recursive-sql-with-entityframework-core-in-mariadb
반응형
'programing' 카테고리의 다른 글
Excel 테이블(VBA)에 새 행 추가 (0) | 2023.07.16 |
---|---|
Matplotlib에게 두 번째(새) 그림을 만든 다음 나중에 이전 그림에 그림을 그리도록 지시하려면 어떻게 해야 합니까? (0) | 2023.07.16 |
비디오 임베디드 워드프레스에서 "유체-폭-비디오-랩퍼" 클래스를 제거하는 방법 (0) | 2023.07.16 |
간헐적인 SQL 시간 초과 오류 문제 해결 방법 (0) | 2023.07.16 |
상위 디렉터리를 가져오는 방법 (0) | 2023.07.16 |