2013-02-28 3 views
1

웹 사이트의 성능을 최적화하려고 했으므로 these rules 을 작성하는 중 컴파일 타임에보기 생성이 파일을 만든 후 .edmx 파일을 만들고 모든 단계를 수행해야했습니다. 이 문제에 직면 :엔터티 프레임 워크 : 관계 오류

Schema specified is not valid. Errors: 
The property for the relationship 'FK_dbo_X_dbo_Y_x_id' contains a Role 'X' has a type 'Site.Models.X' that is not valid for a relationship End. Change the End Role to an EntityType. 

내가 가진 모든 관계.

누구든지이 오류를 어떻게 해결할 수 있습니까?

업데이트 : 난 내 관계 모델

정의하는 방법

: DbContext의

[ForeignKey("foreign_id")] 
    public EntityCollection<MyClass> relation_obj { get; set; } 

:

modelBuilder.Entity<X>().HasMany(m => m.relation_obj); 

관계 어셈블리 :

,536를
[assembly: EdmRelationshipAttribute("DBModel", "FK_dbo_X_dbo_Y_x_id", "X", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(Site.Models.X), "Y", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Site.Models.Y), true)] 
+1

당신은 당신의 최적화와 코드를 보여줄 수 있을까요? –

+0

나는 새로운'edmx' 파일을 추가 한 것이마다 자동으로 새로운 모델을 만들 수 있도록 테이블, 그래서 내가 모델을 삭제하고 디자이너 및 어셈블리 refs 다음과 같은 오래된 모델을 사용하여 수정 :'[assembly : EdmRelationshipAttribute ("DBModel", "FK_dbo_X_dbo_Y_restaurant_id", "X", System.Data.Metadata. Edm.RelationshipMultiplicity.One, typeof (Site.Models.X), "Y", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof (RestaurantApp.Models.Y), true)]'및 사전 빌드 추가 'http : // msdn.microsoft.com/ko-us/library/bb896240.aspx' – Hilmi

+0

Mr. @KirillBestemyanov 다른 정보 평화가 필요하면 저에게 말해주십시오. 귀하의 도움은 매우 감사하겠습니다! – Hilmi

답변

1

문제는 사용자가 정의한 클래스 인 데이터베이스에 매핑되지 않은 탐색 속성 클래스로 정의한다는 것입니다. 하지 마. 엔티티 프레임 워크는 이러한 탐색 속성에서 작동하지 않습니다. 탐색 속성에 대한 자세한 내용은 here을 참조하십시오.

문제는 여기에 있습니다 : MSDN에서

[assembly: EdmRelationshipAttribute("DBModel", "FK_dbo_X_dbo_Y_x_id", "X", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(Site.Models.X), "Y", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Site.Models.Y), true)] 

:

"

public EdmRelationshipAttribute(
    string relationshipNamespaceName, 
    string relationshipName, 
    string role1Name, 
    RelationshipMultiplicity role1Multiplicity, 
    Type role1Type, 
    string role2Name, 
    RelationshipMultiplicity role2Multiplicity, 
    Type role2Type 
) 

매개 변수

relationshipNamespaceName 유형 :에 대한 네임 스페이스의 이름 선택 System.String 협회 이 개체가 참여합니다.

relationshipName 형식 : System.String 이 엔터티가 참여하는 관계 이름입니다.

role1Name 형식 : System.String 연결의 한쪽 끝에있는 형식의 역할 이름입니다.

role1Multiplicity 유형 : System.Data.Metadata.Edm.RelationshipMultiplicity 협회의 일 단부에서 다중 RelationshipMultiplicity를 나타내는 값과 같은 하나 이상의.

role1Type 형식 : System.Type 협회의 한 쪽 끝에서 기업의 유형입니다.

role2Name 형식 : System.String 연결의 다른 쪽 끝에서 유형에 대한 역할 이름입니다.

role2Multiplicity 유형 : System.Data.Metadata.Edm.RelationshipMultiplicity 협회의 타단 다양성을 나타낸다 RelationshipMultiplicity의 값과 같은 하나 이상의.

role2Type 형식 : System.Type 협회의 다른 쪽 끝에서 기업의 유형입니다. 는 "

그래서 role1Type 및 role2Type 엔티티해야합니다. 아니 자신의 정의 클래스.

+0

선생님, 저는 여러분의 요점을 잘 이해하지 못했고 내 탐색기는 다음과 같이'DbContext'를 통해 데이터베이스에 매핑됩니다 :'modelBuilder.Entity ) .HasMany (m => m.relation_obj); 그리고 그것은 이전에 작동했습니다. 각하, 정말 고맙습니다. 고마워! – Hilmi

+0

다음은 EF 클래스가 아닌 Site.Models.Y 및 Site.Models.X입니다. [assembly : EdmRelationshipAttribute ("DBModel", "FK_dbo_X_dbo_Y_x_id", "X", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof (Site.Models.X), "Y", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof (Site.Models.Y), true)] –