我有一个简单的 SharePoint 2010 BCS 解决方案,我在其中定义了两个实体以及它们之间的简单父子关系。我碰巧在我的服务类(和)的单独程序集中有实体类(和Parent
)。仅使用 Finder 和 SpecificFinder 方法时,这似乎没有问题,但是当我尝试执行 AssociationNavigator 方法时,它失败了。当我的实体类型与 BCS 模型定义在同一个程序集中并关联服务类时,AssociationNavigator 工作正常。我这样称呼 AssociationNavigator:Child
ParentService
ChildService
var entity_instance_collection = new EntityInstanceCollection(1);
entity_instance_collection.Add(parent_entity_instance);
var association = (IAssociation)parent_entity.GetMethodInstance("ParentToChildAssociationNavigator", MethodInstanceType.AssociationNavigator);
var child_items = child_entity.FindAssociated(entity_instance_collection, association, lobi);
当实体类型位于单独的程序集中时,我在尝试执行时收到 InvalidMetadataObjectException FindAssociated
:
无法在名称空间“BdcModelProject2.BdcModel1”中名称为“Parent”的实体(外部内容类型)上名称为“ReadItem”的方法上的名称为“parent”的参数上的 TypeDescriptor TypeName“BdcModelProject2.BdcModel1.Parent、BdcModel1”所描述的类型。
有了这个 InnerException:
无法从程序集“BdcModelProject2,版本=1.0.0.0,文化=中性,PublicKeyToken=50bc5a1f7318bdeb”加载类型“BdcModelProject2.BdcModel1.Parent”。
因此,似乎我的应用程序只是试图从定义 BCS 模型的程序集 (BdcModelProject2) 而不是实际定义我的实体的程序集 (ClassLibrary1) 加载我的实体类型。我对此有几点困惑:
- 我看到 BCS 模型在 TypeDescriptors 中具有 TypeName 属性,这些属性描述了实现实体类的类的类型,但是即使在此处提供了乱码,Finder 和 SpecificFinder 方法似乎对我来说也能正常工作,但 AssociationNavigator 无法加载类型。为什么是这样?
- 我在 Visual Studio 生成的 bdcm 文件或 MSDN 文档中的任何地方都看不到TypeDescriptor指示可以为实体类型指定程序集名称的位置。
那么,当这些实体在不同的程序集中定义时,如何在 BCS 项目中使用实体类型?