2014-11-25 6 views
0

"지정된 포함 경로가 유효하지 않습니다."라는 오류가 발생합니다. EntityType 'MyCMS.DAL.SiteSettings'가 다음과 같은 탐색 속성을 선언하지 않습니다. 'SiteSettingOptions'이름. "Entity Framework 오류 : 지정된 포함 경로가 가상 엔터티에 유효하지 않습니다.

이 문제에 관해 많은 게시물을 읽었지만 내가 한 모든 연구는 ICollections와 관련이 있으며 클래스 속성이 아닙니다.

여기 내가 현재 어디에 있으며 문제를 해결하는 데 도움을 줄 수 있습니다.

[Table("SiteSettingsBridge")] 
[DataContract] 
public partial class SiteSettings 
{ 
    [Key] 
    [DataMember] 
    public int SiteSettingsBridgeID { get; set; } 

    [DataMember] 
    public int SiteID { get; set; } 

    [DataMember] 
    public int SiteSettingOptionID { get; set; } 

    [DataMember] 
    public virtual SiteSettingOptions SiteSettingOption { get; set; } 

    [DataMember] 
    [StringLength(500)] 
    public string Value { get; set; } 

    public SiteSettings() 
    { 
     SiteSettingsBridgeID = 0; 
     SiteID = 0; 
     SiteSettingOptionID = 0; 
     Value = ""; 
    } 
} 



[DataContract] 
public partial class SiteSettingOptions 
{ 
    [Key] 
    [DataMember] 
    public int SiteSettingOptionID { get; set; } 

    [DataMember] 
    public string SettingsGroup { get; set; } 

    [DataMember] 
    [StringLength(100)] 
    public string Name { get; set; } 

    [DataMember] 
    [StringLength(500)] 
    public string DefaultValue { get; set; } 

    [DataMember] 
    public SettingType Type { get; set; } 

    public enum SettingType 
    { 
     String = 1, 
     Bool = 2, 
     Integer = 3 
    } 

    public SiteSettingOptions() 
    { 
     SiteSettingOptionID = 0; 
     SettingsGroup = string.Empty; 
     Name = string.Empty; 
     DefaultValue = string.Empty; 
     Type = SiteSettingOptions.SettingType.String; 
    } 
} 

다음 내 DAL 프로젝트 , 나는 내가 위의 오류를 수신하고, 내가 컴파일 할 때이

public static List<Contracts.Sites.SiteSettings> GetBySiteID(int SiteID) 
{ 
using (CMSContext cntx = new CMSContext()) 
{ 
    ///OMITTED FOR BREVITY 

    return cntx.SiteSettings.Include("SiteSettingOptions").Where(i => i.SiteID == SiteID).ToList(); 

} 
} 

같은 컨텍스트 쿼리에 포함 추가하고 실행하려고하고 있습니다.

앞에 몇 가지 질문에 대답하려면 LazyLoading을 사용하지 않고 모델을 만들 때 아무 것도하지 않습니다.

예, 저는 EF의 새로운 브랜드입니다. 이것은 첫 번째 앱입니다.

+3

속성은 'SiteSettingOption' (아니요)이지만'Include ("SiteSettingOptions")'(예 : 마지막 s). 마지막 s를 제거하십시오. 문자열이 아닌 람다를 사용하는 Include 확장을 사용하면 'Include (x => x.SiteSettingOption)'와 같은 결과를 얻을 수 있습니다. –

+0

정말 고마워요. 실수로 인용 부호 안에있는 문자열이 데이터베이스의 테이블을 가리키고 있다고 생각했습니다. 보조 노트로, 나는 DAL 프로젝트의 어디에서나 람다를 사용할 수 없다. 왜 그런지 모르겠습니다. "lambda 표현식을 문자열로 변환 할 수 없습니다"라는 컴파일 오류가 발생합니다. 나는 이것이 어디 에나 게시 된 것을 보았지만 그것은 나를 위해 일하지 않았다. – Solo812

+0

어떤 이유로 든 람다 기반'Include'는 다른 네임 스페이스에있는 다른 클래스의 확장 메소드입니다. 사용할 수 있으려면'using System.Data.Entity'를 추가해야합니다. –

답변

0

감사 벤 ...

귀하의 속성은 SiteSettingOption (NO들)라고하지만 당신은 (최종의 통지) Include("SiteSettingOptions")에 노력하고 있습니다. 마지막 s를 제거하십시오. 문자열 대신 람다를 사용하는 확장자를 사용하여 이것을 피할 수 있습니다. Include(x => x.SiteSettingOption)