LINQ에서 다음과 같은 상황이 있습니다. 다른 값을 가질 수있는 "Status"필드가있는 개체 (블로그 "Post")가 있습니다. 이 모든 값을 나열하는 테이블이 있습니다 (이 테이블에는 Id, Desc가 있습니다).
이제 두 테이블 간의 관계가 만들어 지므로 모델에서 Post.Status는 int가 아니라 "PostStatus"의 인스턴스입니다.LINQ2SQL : 다른 엔터티에 대한 참조가있는 엔터티 필드를 업데이트하십시오.
따라서 게시물의 상태를 20으로 설정하려면 필드를 20으로 설정할 수 없습니다. 할당 할 PostStatus의 인스턴스가 있어야합니다. 이 상태 값은 모두 논리로 하드 코드되어 있으므로 코드에 "20"을 하드 코드하면됩니다.
더 나은 방법이 있나요? 이 불필요하게 PostStatus 인스턴스를 얻을 수있는 DB를 조회하기 때문에
switch (Action) {
case "Ignore":
post.PostStatus = (from s in db.PostStatus where s.Id == 90 select s).First();
break;
case "Assign":
post.PostStatus = (from s in db.PostStatus where s.Id == 20 select s).First();
break;
case "MarkDone":
post.PostStatus = (from s in db.PostStatus where s.Id == 30 select s).First();
break;
case "MarkPublished":
post.PostStatus = (from s in db.PostStatus where s.Id == 40 select s).First();
post.Public = true;
break;
}
은 내가 먼저 모든, 정직,이 코드를 싫어하지만, 대부분 있기 때문에 너무 자세한입니다.
더 좋은 방법이 있나요?
감사합니다.
다니엘
좋습니다.하지만 그것이 열거 형 일 필요는 없다고 가정 해 봅시다. 사용자가 다른 드롭 다운에서 선택한 것과 같은 이유가 무엇이든간에 이미 다른 관련 레코드의 ID를 가지고 있으며이를 설정하려고한다고 가정 해 보겠습니다. 예를 들어 게시물에는 작성자가 있고 저자 테이블이 있으며 작성자의 ID가 있으며이를 게시 레코드로 설정하려고합니다. 이것보다 더 좋은 방법이 있습니까? –
그것이 내가 언급했던 두 번째 일이 어떻게 작동 하는지를 보여줍니다. "LoadWith"또는 관련 테이블 값을 지연로드하지 않는 한 하위 레코드의 ID 값을 설정하고 SubmitChanges를 설정하면됩니다. 관련된 객체를 심하게로드하면 ID를 설정할 수 없지만 그렇게하지 않으면 잘 동작합니다. – nitzmahone