안녕하세요
EFCore 이용한 개발중 의문점이생겼는데 속시원하게 해답을 못찾아서 질문드립니다…
public class DBDelegater
{
private readonly ControleServerBase.DB.DbContextFactory<ControlContext> _contextFactory;
ControleServerBase.DB.Context.ControlContext Context { get; set; }
string[] blank = { "" };
public DBDelegater()
{
_contextFactory = new();
Context = _contextFactory.CreateDbContext(blank);
}
public async Task<DBModels.MobileSet> GetPosition(StatusData dtoContent)
{
~~~
await Context.Positions.AddAsync(mobileSet.daoPosition);
await Context.SaveChangesAsync();
mobileSet.daoVacuum.positionId = mobileSet.daoPosition.id;
await Context.Vacuums.AddAsync(mobileSet.daoVacuum);
await Context.SaveChangesAsync();
~~~
}
public async Task<DBModels.MobileSet> GetPosition2(StatusData dtoContent)
{
~~~
await Context.Positions2.AddAsync(mobileSet.daoPosition);
await Context.SaveChangesAsync();
mobileSet.daoVacuum.positionId = mobileSet.daoPosition.id;
await Context.Vacuums2.AddAsync(mobileSet.daoVacuum);
await Context.SaveChangesAsync();
~~~
}
}
위와같이 DBDelegater라는놈 안에서 모든 DB작업을 진행하게 하고
다 비동기식으로 작업이 돌아가고있는상태입니다
질문은 아래와같습니다
-
GetPosition 함수의 내용처럼 Positions 테이블에 데이터를 넣고 autoincrement 로 자동생성된 id를 Vacuums 데이터에 입력후 테이블에 집어넣는 로직이 있는데
이경우 SaveChanges를 두번진행하게되는데 이를 간소화는 방법이 있을까요??? -
Context를 하나 생성한뒤 이를 돌려쓰고있는데 만약 비동기로 여러개 함수가 돌아가고 있는상태에서 하나가 AddAsync로 데이터를 입력해두고 SaveChages로 테이블에 반영되는 사이에
다른 함수에서 Context.ChangeTracker.Clear(); 작업을해서 트래커가 초기화된경우가 발생할수있나요??
일단 jmeter 이용해서 일부로 발생시켜보려고했을땐 해당 에러가 발생은 안되었는데 속시원하게 이해가 되지않아서 질문드립니다
감사합니다…