我正在使用实体框架,我想通过wcf服务公开一些方法;
我有这个功能(在cs页面上)
using (ICRMEntities oContext = RemClient.Create<ICRMEntities>())
oContext.FindByKey<DataLib.Models.CRM.ActivitySLA>("ActivitySLA", SLAID);
此功能的内容是
public static T FindByKey<T>(this IQueryable<T> oQuery, int keyValue) where T : EntityObject, ISimpleBaseClassMD
{
return oQuery.FindByKey<T>(keyValue, null);
}
在WCF服务中定义的接口为:
public interface ICRMEntities : IDisposable, IContextWithUser
T FindByKey<T>(string sObjectTypeCode, int keyValue, bool bRequestValue) where T : EntityObject, ISimpleBaseClassMD;
WCF中的这种通用方法存在问题; 如何包装此方法以保存此功能?
答案 0 :(得分:3)
你不能。
您无法通过WCF服务公开泛型方法。您需要定义将要使用的类型。这是SOAP的限制。
但是,您可以创建一个基类作为返回类型,并向服务添加KnownType
属性,以定义此服务可以返回的派生类。
类似的东西;
[KnownType(typeof(SomeClass))]
public interface ICRMEntities : IDisposable, IContextWithUser
EntityObject FindByKey(string sObjectTypeCode, int keyValue, bool bRequestValue)