두 개의 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'유형을 기반으로합니다.
초기 바인딩 엔티티를 EF와 함께 사용하려면 무엇을 추가해야합니까? – Neil
글쎄, EF 전문가는 아니지만 최소한 코드, 코드 속성 또는 규칙에 의해 정의 된 기본 키가 필요합니다. CrmSvcUtil.exe에 의해 생성 된 코드에 의해 상속 된 기본'Entity'는 EF Code-First 사용을 위해 설계되지 않았습니다. – Nicknow
이 요구 사항을 처리하는 올바른 방법은 EF Code First 호환 POCO를 생성 한 다음 CrmSvcUtil.exe와 POCO의 'Entity' 기반 클래스간에 매핑하는 것입니다. 이러한 매핑을 자동화하는 한 가지 방법으로 AutoMapper를 살펴볼 수 있습니다. – Nicknow