1

我在 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'。
4

1 回答 1

1

这是行不通的。CrmSvcUtil.exe 生成的早期绑定实体的编写方式不是它们将首先使用 EF 代码。

您需要编写自己的早期绑定实体来完成这项工作。您可以手动执行此操作,也可以通过CrmSvcUtil.exe的自定义代码生成类执行此操作。

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

于 2013-07-02T16:58:07.617 回答