문제

우리는 다음과 같이 보이는 테이블이 있습니다.

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

모든 키는 다른 테이블과 관련이 있지만 응용 프로그램이 배포되는 방식으로 인해 ID를 따라 매개 변수로 전달하는 것이 더 쉽습니다. 그래서 우리는 이것을하고 싶습니다 :

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

우리는 linq-to-sql로 그것을 할 수 있지만 EF는 할 수 있습니까?

도움이 되었습니까?

해결책

이 누락 된 기능은 많은 사람들을 괴롭히는 것 같습니다.

  • 좋은 소식 : MS는 .NET 4.0의 문제를 해결합니다.
  • 나쁜 소식 : 지금은 또는 3.5에 갇혀 있다면 약간의 일을해야하지만 가능합니다.

당신은 다음과 같이해야합니다.

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();

다른 팁

내가 쉽게 일을하기 위해하고있는 일은 부분적인 클래스에서 외국 키 속성을 직접 추가하는 것입니다.

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}

이 ID를 기반으로 엔티티를 구성하는 확장 방법을 만들 수 있습니다.

EntityKey를 사용하면 문제가 해결됩니다.)

알크.

또 다른 방법 DB 스키마는 '오염'을 신경 쓰지 않는 경우, 계산 된 열을 추가하는 것입니다. 예를 들어 외국 키 필드 FK_Customer가있는 경우 FK_CUSTOMER 표현식을 갖는 새 계산 열 fk_customer_computed를 정의 할 수 있습니다. update edmx 모델을 생성하면 필드가 일반 필드처럼 나타나서 엔티티 객체에서 참조 할 수 있습니다.

또는 EF4를 기다리십시오 :)

Dylan의 답변에서 Alex James는 정확하게 이에 대한 블로그를 작성하여 문제를 완전히 설명하고 부분 클래스 + 속성 솔루션을 설명하는 방법을 설명했습니다.

가짜 외국 열쇠 -EF3.5

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