当我的实体类在另一个程序集中时,无法执行SharePoint BCS AssociationNavigator

时间:2012-03-29 19:30:58

标签: sharepoint sharepoint-2010 bcs

我有一个简单的SharePoint 2010 BCS解决方案,我在其中定义了两个实体以及它们之间的简单父子关系。我碰巧在我的服务类(ParentChild)的单独程序集中有实体类(ParentServiceChildService)。当使用Finder和SpecificFinder方法时,这似乎不会出现问题,但是当我尝试执行AssociationNavigator方法时,它会失败。当我的实体类型与BCS模型定义在同一个程序集中并关联服务类时,AssociationNavigator可以正常工作。我这样称呼AssociationNavigator:

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);

当实体类型在单独的程序集中时,我在尝试执行FindAssociated时会收到InvalidMetadataObjectException:

  

无法加载TypeDescriptor TypeName描述的Type   带名称的参数'BdcModelProject2.BdcModel1.Parent,BdcModel1'   实体上具有名称“ReadItem”的方法上的“父”(外部内容   在命名空间'BdcModelProject2.BdcModel1'中输入名称'Parent'。

有这个InnerException:

  

无法从程序集中加载“BdcModelProject2.BdcModel1.Parent”类型   'BdcModelProject2,Version = 1.0.0.0,Culture = neutral,   公钥= 50bc5a1f7318bdeb”。

所以,似乎我的应用程序只是尝试从定义BCS模型的程序集(BdcModelProject2)加载我的实体类型,而不是实际定义我的实体的程序集(ClassLibrary1)。我对此有几点困惑:

  1. 我看到BCS模型在TypeDescriptors中有TypeName属性,用于描述实现实体类的类的类型,但Finder和SpecificFinder方法似乎对我来说正常运行,即使这里提供了乱码,但是AssociationNavigator无法加载类型。这是为什么?
  2. 我没有在Visual Studio生成的bdcm文件或TypeDescriptor的MSDN文档中看到任何指示可以为实体类型指定程序集名称的位置。
  3. 那么,当在不同的程序集中定义这些实体时,如何在BCS项目中使用实体类型?

1 个答案:

答案 0 :(得分:0)

这里有两种可能性:

  • 找不到dll
  • 它找到了一个旧版本的dll,它不包含您正在使用的新代码

我们经常遇到旧版本在GAC中的问题。当bin目录中安装了新版本时,它会忽略它并继续使用GAC中的版本。然后删除GAC中的版本,但它仍然无效,因为它已缓存旧版本。最后,IIS重置或机器重启使其正常工作。

简短回答:尝试在机器上找到旧版本的dll。

修改

您可以使用装配绑定日志查看器等工具来追踪问题。

请参阅:http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.90).aspx