2012-12-18 4 views
2

을 선택할 때 속성 제외는 일치하는 솔루션을 찾을 수 없습니다. MVC4 응용 프로그램, EF 및 CodeFirstSharpMembership 공급자에게 알려주십시오.
엔티티 Entity Framework 5

public class User 
{ 
    ... 
    public virtual ICollection<Role> Roles { get; set; } 
} 

그리고 표준 역할 법인이 :

public class Role 
{ 
    ... 
    public virtual ICollection<User> Users { get; set; } 
} 

내가 사용

public class MyEntity 
{ 
    ... 
    public virtual User Developer { get; set; } 
} 

에 FK 내 자신의 실체를 만들려고 할 때 물론 나는 사용자가 역할, 역할 reffers에 reffers 때문에 항상 셀프 레퍼런스 루프를 얻는다. 사용자에게.
다음 나는 어떤 외래 키를 선택하지 않도록하고,

var Developers = Context.MyEntities; 

그리고 내 된 IQueryable는 "개발자"필드 선수는 물론 뭔가 를 선택한 후

Context = new DataContext(); 
Context.Configuration.LazyLoadingEnabled = false; 

에 tryed.
그럼 난에 tryed :

var Developers = Context.MyEntities.Include("Developer"); 

물론 자기 Referrence 루프를 얻었다.

어떻게 계속 FKeys를 선택하고 사용자로부터 "역할"필드를 제외시킬 수 있습니까?

+0

오류가 발생하고 있습니까? – IronMan84

+0

예외 ""System.Data.Entity.DynamicProxies.User_0AFA654F65C3FB4CE9ADD687E486B5EB3BE472E040A3B97DA79144EA5F3D75AC '형식의 자체 참조 루프가 감지되었습니다.'행 [0] .Developer.Roles [0] .Users '. " – linuxod

답변

3

이 자체 참조 엔티티에 문제가 안됩니다. 직렬화 문제가있는 경우 (오류 메시지를 생성하려고 시도한 것을 제공하지 않았기 때문에 추측해야합니다. 가장 일반적인 직렬화 또는 데이터 바인딩은 간단히 알 수 없습니다)

응용 프로그램 (T4가 생성 또는 코드-먼저 하나) POCO 객체를 사용하고 있기 때문에 Turning off Proxy object creation on your DbContext.

DbContext.Configuration.ProxyCreationEnabled = false; 

일반적으로이 시나리오입니다. Entity Framework에서 POCO 개체로 작성되지 않은 개체의 변경 내용을 추적하려고 할 때 문제가 발생합니다. 이를 해결하기 위해 EF는 POCO 개체의 특성이 부족하고 직렬화 할 수없는 프록시 개체를 만듭니다.

또한 XY Problem이 있다고 덧붙입니다.문제를 해결할 것이라고 생각하기 때문에 (X 문제) 속성을 제외하는 방법 (Y 문제)을 묻는 중입니다. 문제가 있거나 그렇지 않을 수도 있습니다. 실제로 당신은 소스 문제 (X)를 기술 할 필요가있다. 왜냐하면 (Y)를 필요로하지 않는 해결책이있을 것이기 때문이다.

+0

죄송합니다. 더 자세한 정보를 제공하지 않았습니다. 당신이 맞아, 나는 JsonConvert.SerializeObject() 메서드 (NewtonSoft.Json에서), 내가 뭘 하려는지에 문제가있다 - 서버 쪽에서 데이터를 빌드하고 그것을 jqGrid.DbContext.Configuration.ProxyCreationEnabled = false; 결과가 없으므로 외래 키에서 null이 반환됩니다. 내가 제공 한 XY 문제 링크를 읽고 조금 후에 답변을 드리겠습니다. 감사. – linuxod

+0

'ProxyCreationEnabled'를 끄고 아마도 당신 자신의 [JsonConverter] (http://james.newtonking.com/projects/json/help/index.html?topic=html/T_Newtonsoft_Json_JsonConverter.htm)을 써야 할 것입니다. . –

0

사용자 및 역할이있는 내 응용 프로그램에는 구조가 매우 비슷합니다. 내 응용 프로그램 (그리고 이것에 대한 답변이 될 수도 있습니다), 내가 UserRole, 사용자와 역할 테이블 사이에 링크 테이블을 만드는 세 번째 개체가 있다는 것입니다. UserRole 객체의 유일한 항목은 User 및 Role 테이블에 대한 FK입니다. 그런 다음 사용자를 List<UserRole> Roles으로 전환하고 Role 객체에서 User 참조를 제거 할 수 있습니다.

작동하는지 알려주세요.

코드 : 당신이 (직렬화와 같은) 자기 참조를 처리 할 수없는 방법을 사용하지 않는

public class UserRole 
{ 
    [Key, ForeignKey("User"), ColumnAttribute(Order=0)] 
    public int UserID { get; set; } 

    [Key, ForeignKey("Role"), ColumnAttribute(Order = 1)] 
    public int RoleID { get; set; } 

    public virtual GaiaUser User { get; set; } 

    public virtual Role Role { get; set; } 
} 
+0

사용자와 역할간에 해당 계층을 만들려고 시도했습니다. 불행히도 그것은 속임수가 아니 었습니다. 나는 내 질문에 내가 이미 다른 회원 공급자를 사용하고 있다고 썼다. 이미 다른 회원 공급자는 역할과 사용자 표준 필드를 사용하고있다. – linuxod

관련 문제