2013-07-01 3 views
1

두 개의 CRM 제품 엔티티를 함께 연결하는 MVC4의 간단한 모델이 있습니다. CRM을 개체는 초기 CrmSvcUtil.exe에 의해 생성 된 클래스를 바인딩하고 모델은 다음과 같습니다CRM 엔티티에 연결되는 EF 모델의 핵심 문제

namespace Demo.Models 
{ 
    public class ProductLink 
    { 
     public int Id { get; set; } 

     [ForeignKey("ProductSource")] 
     [Display(Name = "Product Source")] 
     public Guid? SourceId { get; set; } 
     public virtual Xrm.Product ProductSource { get; set; } 

     [ForeignKey("ProductTarget")] 
     [Display(Name = "Product Target")] 
     public Guid? TargetId { get; set; } 
     public virtual Xrm.Product ProductTarget { get; set; } 
    } 
} 

내가하려고 할 때 내가 얻을 컨트롤러를 추가

Demo.Models '에 대한 메타 데이터를 검색 할 수 없습니다. ProductLink '. 하나 이상의 유효성 검사 오류가 모델 생성 중에 발견되었습니다 :

  • System.Data.Entity.Edm.EdmEntityType는 : EntityType 'RelatedEntityCollection'는 정의 된 키가 없습니다. 이 EntityType의 키를 정의하십시오.
  • System.Data.Entity.Edm.EdmEntityType :: EntityType 'EntityCollection'에 정의 된 키가 없습니다. 이 EntityType의 키를 정의하십시오.
  • System.Data.Entity.Edm.EdmEntityType :: EntityType '관계'에 정의 된 키가 없습니다. 이 EntityType의 키를 정의하십시오.
  • System.Data.Entity.Edm.EdmEntitySet :: EntityType : EntitySet 'RelatedEntityCollections'은 정의 된 키가없는 'RelatedEntityCollection'유형을 기반으로합니다.
  • System.Data.Entity.Edm.EdmEntitySet :: EntityType : EntitySet 'EntityCollections'은 정의 된 키가없는 'EntityCollection'유형을 기반으로합니다.
  • System.Data.Entity.Edm.EdmEntitySet :: EntityType : EntitySet '관계'는 정의 된 키가없는 'Relationship'유형을 기반으로합니다.

답변

1

이것은 작동하지 않습니다. CrmSvcUtil.exe에 의해 생성 된 초기 바인딩 엔터티는 EF 코드로 먼저 작동하는 방식으로 작성되지 않습니다.

이 작업을 수행하려면 초기 바인딩 엔터티를 직접 작성해야합니다. 수동으로 또는 CrmSvcUtil.exe에 대해 custom code generation class을 통해이 작업을 수행 할 수 있습니다.

대체 방법은 필요한 엔티티에 대한 수동 코드 EF 코드 우선 호환 클래스를 작성한 다음 해당 클래스에서 매퍼를 CrmSvcUtil 초기 바인딩 클래스에 작성하는 것입니다.

+0

초기 바인딩 엔티티를 EF와 함께 사용하려면 무엇을 추가해야합니까? – Neil

+0

글쎄, EF 전문가는 아니지만 최소한 코드, 코드 속성 또는 규칙에 의해 정의 된 기본 키가 필요합니다. CrmSvcUtil.exe에 의해 생성 된 코드에 의해 상속 된 기본'Entity'는 EF Code-First 사용을 위해 설계되지 않았습니다. – Nicknow

+0

이 요구 사항을 처리하는 올바른 방법은 EF Code First 호환 POCO를 생성 한 다음 CrmSvcUtil.exe와 POCO의 'Entity' 기반 클래스간에 매핑하는 것입니다. 이러한 매핑을 자동화하는 한 가지 방법으로 AutoMapper를 살펴볼 수 있습니다. – Nicknow

관련 문제