使用 ILSpy 打开 EntityFramework.dll(v4.1),处理单复数的相关类位于 System.Data.Entity.ModelConfiguration.Design.PluralizationServices 命名空间下:
其中 PluralizationService 是单复数变换服务的抽象基类,定义如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
internal abstract class PluralizationService { public CultureInfo Culture { get; protected set; } public abstract bool IsPlural(string word); public abstract bool IsSingular(string word); public abstract string Pluralize(string word); public abstract string Singularize(string word); ///
///
EnglishPluralizationService 是英文的具体实现类,包含了规则变换和不规则变换,代码太长就不贴出了。
估计很多朋友会和我一样会,担心这个实现是否完整。我简单查看了下源码,发现了这个单词:
1
pneumonoultramicroscopicsilicovolcanoconiosis
不用数了,一共是 45 个字母,这可是最长的英语单词。这么长(估计实际用的也不多)的单词都收录了,再加上 EnglishPluralizationService 类 2451 行的代码,想必非常完整了。
但不幸的是,这些类都是 internal,没法直接用。不过我们可以使用 ILSpy 把这几个类提出来,供我们享用。
ILSpy 可以将整个 dll 反编译成项目,也可以将单个类反编译成文件:
但不能反编译一个命名空间,有点遗憾。
余下的工作的和怎么用,就不用我多说了吧。
分享一份我处理好的源码:PluralizationServices.rar (8KB,VS2010)
最新评论