문제

테스트 기반 에이 테스트가 있습니다.

public void WorksWithAreaUsers()
        {
            using (new TransactionScope())
            {
                //arrange
                var userBusiness = new UserBusiness();
                var user = new User
                {
                    Name = "TestUser###",
                    Login = "domain\test-user###"
                };
                userBusiness.Add(user);

                var areaBusiness = new AreaBusiness();
                var area = new Area
                {
                    Name = "TestArea###",
                    Description = "Test Area Description",
                    Users = new List<User> { user }
                };

                //act
                areaBusiness.Add(area);

                //assert
                var areaFromDb = areaBusiness.FindById(area.AreaID);
                Assert.IsNotNull(areaFromDb.Users);
                Assert.IsTrue(areaFromDb.Users.Count > 0);
                Assert.IsTrue(areaFromDb.Users.Any(c => c.UserID == user.UserID));
            }
        }

하고있는 일 :

  • 새 사용자를 기본에 삽입합니다.
  • 사용자 관계와 함께 새로운 영역을베이스에 삽입합니다.

실제로 일어나는 일 :

  • 새 사용자가 삽입됩니다.
  • 새로운 영역이 삽입됩니다.
  • 새로운 사용자는 지역 관계와 함께 다시 삽입됩니다.

무슨 일이 일어날 수 있습니까?

추가 정보:

  • 영역과 사용자는 실제로 EntityObject가 아닙니다. Automapper를 사용하여 DTO/Entity를 매핑하고 있습니다. 문제 가이 논리에 있다고 생각합니다. 어떤 순간에, 나는 목록과 EntityCollection 사이를 매핑해야합니다. EntityCollection.add 메소드를 사용하여 새 EntityCollection을 작성하고 사용자를이 컬렉션의 사용자 방향으로 변환했습니다. 새 엔티티를 만들지 않기 위해 첨부를 사용해야한다고 생각하지만, 적절한 바인딩없이 EntityCollection에서 호출 할 때이 방법은 작동하지 않습니다.

이 문제를 해결하기 위해 그보다 영리한 또는 해결 방법을 제안합니까? 프로젝트 계층 (웹 -> 비즈니스 -> 데이터 -> ef)이 실제로 필요합니다. EF와 직접 작업하는 ASP.Net은 모듈 식 이유로 여기서 할 수없는 것입니다.

편집하다:

나는이 작업을 수행하기 위해 Automapper를 사용한다는 아이디어를 포기하고 있습니다 =/ 나는 엔티티가 많지 않으며, 일하기 위해서는이 라이브러리에서해야 할 변경에 약간의 노력이 필요합니다. 사소한 일이 아닙니다. 할 것. 혼자 매핑하는 것이 낫습니다.

도움이 되었습니까?

해결책

귀하의 사용자 객체에는 엔티티 간의 관계를 설정하는 데 사용할 수있는 영역 속성이 있다고 가정합니다. 영역을 설정하는 대신 새 목록과 동일하면 영역 객체를 작성한 후 새 영역과 동일한 user.area를 설정합니다. 이것이 내가 새로운 엔티티를 연결하는 방법이며 안정적으로 작동합니다.

편집하다

내가 당신이하는 일을 이해한다면, 당신은 나중에 엔티티 객체 (EO)를 생성하고 해당 EO를 컨텍스트에 첨부하고 저장하는 비즈니스 객체 (BOS)를 만들고 있습니다.

기본 사항이 정확하다고 가정하면 문제의 정확한 원인을 결정하려면 해당 BO가 EOS를 생성하고 컨텍스트에 첨부하는 방법에 대한 코드를 볼 필요가 있습니다.

다른 팁

내 추측 (그리고 그것은 단지 추측입니다)

따라서 그래프의 다른 위치에서 동일한 객체 (사용자)를 볼 때 이전에 만든 객체를 재사용하는 대신 새 개체를 만듭니다.

이것은 아마도 당신이보고있는 것을 설명 할 것입니다.

알렉스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top