EF模型链接到CRM实体的关键问题

时间:2013-07-01 22:06:29

标签: asp.net-mvc entity-framework dynamics-crm-2011

我在MVC4中有一个简单的模型,它将两个CRM产品实体链接在一起。 CRM实体是CrmSvcUtil.exe生成的早期绑定类,模型为:

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'Relationship'没有定义键。定义此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'Relationships'基于没有定义键的'Relationship'类型。
  •   

1 个答案:

答案 0 :(得分:1)

这不起作用。 CrmSvcUtil.exe生成的早期绑定实体的编写方式不能与EF代码优先使用。

您需要编写自己的早期绑定实体才能使其正常工作。您可以手动或通过custom code generation class为CrmSvcUtil.exe执行此操作。

另一种方法是为您需要的实体编写手动代码EF代码优先兼容类,然后将映射器从它们写入CrmSvcUtil早期绑定类。