Entity Framework를 사용하는 웹 응용 프로그램 (ASP.NET MVC3)을 만들려고 노력 중이며 벽에 다시 닿았습니다. 뷰에서 컬렉션에 대해 foreach 루프를 실행하려고하면 예외가 발생합니다.
System.InvalidOperationException : 'GvG.Entities.News'클래스에는 클래스가 없습니다. 매개 변수없는 생성자.
이제 제 질문입니다, 어떻게 든 내 레코드 유형에 매개 변수없는 생성자를 정의 할 수 있습니까?
내 기록 유형은 다음과 같습니다.
type News = {
mutable ID:int;
mutable Author:string;
mutable Title:string;
mutable Content:string }
대신 베이킹 필드 등을 사용하여 수업을 만들 수 있다는 것을 알고 있습니다.하지만 피하려고하는 것입니다.
나는 F #팀을 위해 수행 한 일부 계약 프로젝트 중 (Entity Framework의 경우)이 문제를 해결하려고 시도했으며 다음과 같은 실험적 솔루션을 찾을 수 있습니다.F #PowerPack 소스. 완전히 테스트되지 않은 & 당신은 스스로 그것을 만들어야 할 것입니다. 실험적 솔루션은 쿼리의 모든 F #튜플과 F #레코드를 다른 (변경 가능한) 유형으로 대체 한 다음 결과를 레코드 / 튜플로 변환합니다.
편집하다귀하의 질문에 정의 클래스에 대한 언급을 보지 못했지만, 여기에 동일한 문제로 올 수있는 다른 사람들을 위해 예제를 남겨 두겠습니다.
쉬운 해결 방법은 없습니다. 불행한 해결책은 명시 적으로 속성을 가진 클래스를 정의하는 것입니다.
type News() =
let mutable id = 0
let mutable author = ""
let mutable title = ""
let mutable content = ""
member x.ID with get() = id and set(v) = id <- v
member x.Author with get() = author and set(v) = author <- v
member x.Title with get() = title and set(v) = title <- v
member x.Content with get() = content and set(v) = content <- v
그것은 레코드와 비교할 때 매우 추악 합니다만, 현재 버전의 F #에서이를 수행하는 유일한 방법입니다. F #팀이 알고있는 것이므로 다음 버전에서는 더 나은 해결책이있을 수 있습니다.
그것은 오래된 것입니다,하지만 오늘 비슷한 문제를 발견하고, F #3.0처럼 그것을 극복 할 수 있습니다.[<CLIMutable>]
속성:http://msdn.microsoft.com/en-us/library/hh289724.aspx
이렇게하면 C #API에 POCO가 필요한 많은 시나리오에서 F #불변 레코드를 사용할 수 있습니다.
MSDN은 "레코드 유형에서는 생성자를 정의 할 수 없습니다."라고 말합니다.
http://msdn.microsoft.com/en-us/library/dd233184.aspx
[<CLIMutable>]
, 그래서 당신은 맞았어요 :) - Bartosz