我在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'类型。
答案 0 :(得分:1)
这不起作用。 CrmSvcUtil.exe生成的早期绑定实体的编写方式不能与EF代码优先使用。
您需要编写自己的早期绑定实体才能使其正常工作。您可以手动或通过custom code generation class为CrmSvcUtil.exe执行此操作。
另一种方法是为您需要的实体编写手动代码EF代码优先兼容类,然后将映射器从它们写入CrmSvcUtil早期绑定类。