entity,复用 Entity Framework 中英语单复数形式变换的类

数据库表名用复数、实体类名用单数,集合属性用复数…编程中经常会遇到英语单复数变换的问题,你能准确处理吗?对我来说,十年前或许可以,but don't worry,我们有现成的类提供些类服务,来自 EntityFrameWork。
使用 ILSpy 打开 EntityFramework.dll(v4.1),处理单复数的相关类位于 System.Data.Entity.ModelConfiguration.Design.PluralizationServices 命名空间下:
image复用 Entity Framework 中英语单复数形式变换的类entity
其中 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); /// /// Factory method for PluralizationService. _disibledevent=>/// Please set the PluralizationService _disibledevent=>/// to extend the service to other locales. /// /// CultureInfo
/// PluralizationService public static PluralizationService CreateService(CultureInfo culture) { if (culture.TwoLetterISOLanguageName == "en") { return new EnglishPluralizationService(); } throw new NotImplementedException("We don't support locales other than english yet"); } }

EnglishPluralizationService 是英文的具体实现类,包含了规则变换和不规则变换,代码太长就不贴出了。
估计很多朋友会和我一样会,担心这个实现是否完整。我简单查看了下源码,发现了这个单词:
1
pneumonoultramicroscopicsilicovolcanoconiosis
不用数了,一共是 45 个字母,这可是最长的英语单词。这么长(估计实际用的也不多)的单词都收录了,再加上 EnglishPluralizationService 类 2451 行的代码,想必非常完整了。
但不幸的是,这些类都是 internal,没法直接用。不过我们可以使用 ILSpy 把这几个类提出来,供我们享用。
ILSpy 可以将整个 dll 反编译成项目,也可以将单个类反编译成文件:
imageimage复用 Entity Framework 中英语单复数形式变换的类entity imageimageimage复用 Entity Framework 中英语单复数形式变换的类entity
但不能反编译一个命名空间,有点遗憾。
余下的工作的和怎么用,就不用我多说了吧。
分享一份我处理好的源码:PluralizationServices.rar (8KB,VS2010)
Tags: 

延伸阅读

最新评论

发表评论