【问题标题】:Weird names in WCF metadata when using Generic classes使用通用类时 WCF 元数据中的奇怪名称
【发布时间】:2014-10-07 20:52:46
【问题描述】:

我在使用 NHibernate 3.0 创建 wcf 数据服务时遇到了一个非常奇怪的问题

这是我想作为数据服务的一部分公开的具体类

public class PayeeType : LookupIdentifierType<int, CamConnect.Entities.DomainEntities.Lookup.PayeeType, PayeeTypeIdentifiers>
{
    public virtual String TypeName { get; set; }
}

这是基类(通用)定义

[IgnoreProperties("Identifier")]
public abstract class LookupIdentifierType<TId, TDto, TIdentifier>
{
    public virtual TIdentifier Identifier 
    { 
        get 
        { 
            return (TIdentifier)Enum.Parse(typeof(TIdentifier), Id.ToString()); 
        } 
        //set 
        //{
        //    String idString = (Convert.ChangeType(value, value.GetTypeCode())).ToString();
        //    Id = Int32.Parse(idString) as TId; 
        //} 
        set
        {
            //String idString = (Convert.ChangeType(value, value.GetTypeCode())).ToString();
            Id = (TId)Convert.ChangeType(value, typeof(TId));
        }
    }

    public virtual String IdentifierText
    {
        get { return Enum.GetName(typeof(TIdentifier), Identifier); }
        set 
        {
            System.Globalization.TextInfo myTI = new System.Globalization.CultureInfo("en-US", false).TextInfo;                
            TIdentifier temp;                
            bool success = Enum.TryParse<TIdentifier>(value, true, out temp);
            if (!success) Enum.TryParse<TIdentifier>(myTI.ToTitleCase(value).Replace(" ",""), true, out temp); 
            Identifier = temp; 
        }
    }

    public static TReturn GetForIdentifier<TReturn>(TIdentifier identifier) where TReturn : class, ILookupIdentifierType<TIdentifier>
    {
        Type constructedType = typeof(TReturn);
        ILookupIdentifierType<TIdentifier> returnObj = Activator.CreateInstance(constructedType) as ILookupIdentifierType<TIdentifier>;
        returnObj.Identifier = identifier;
        return returnObj as TReturn;
    }
}

现在,当我看到服务元数据时,我的基本类型得到了非常奇怪的名称

<Schema Namespace="Entities.Entities.Lookup" 
    xmlns="http://schemas.microsoft.com/ado/2006/04/edm">  
<EntityType Name="PayeeType" 
    BaseType="Entities.Entities.Lookup.LookupIdentifierType
    _x0060_3_x005B_System.Int32_x0020_.Entities.DomainEntities.Lookup.
    PayeeType_x0020.Entities.Identifiers.PayeeTypeIdentifiers_x005D_" />

这会导致添加引用功能失败,导​​致(据我所知)WCF 数据服务不允许名称中包含下划线,并且我得到“名称”属性无效错误。

有人遇到过这种情况吗?如何更改泛型基类型的名称?

【问题讨论】:

    标签: c# .net wcf nhibernate wcf-data-services


    【解决方案1】:

    我认为您需要在使用泛型时明确指定基类的数据协定名称。

    Naming Generic DataContracts in WCF

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2015-12-28
      • 2013-10-13
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      相关资源
      最近更新 更多