엔티티 프레임 워크 : 외국 키 속성 설정
-
20-08-2019 - |
문제
우리는 다음과 같이 보이는 테이블이 있습니다.
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는 정확하게 이에 대한 블로그를 작성하여 문제를 완전히 설명하고 부분 클래스 + 속성 솔루션을 설명하는 방법을 설명했습니다.
제휴하지 않습니다 StackOverflow