数据库表名用复数、实体类名用单数,集合属性用复数…编程中经常会遇到英语单复数变换的问题,你能准确处理吗?对我来说,十年前或许可以,but don't worry,我们有现成的类提供些类服务,来自 EntityFrameWork。
使用 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); ///
/// 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 反编译成项目,也可以将单个类反编译成文件:
但不能直接反编译一个命名空间,有点遗憾。
余下的工作的和怎么用,就不用我多说了吧。
分享一份我处理好的源码:PluralizationServices.rar (8KB,VS2010)
延伸阅读
- 2010-12-15-- exists,Entity SQL Language 三 Where/Exists/In/Like/参数及
- 2011-7-16-- entity,Entity Framework June 2011 CTP 新特性一瞥
- 2010-12-15-- 诊断卡代码ef,Entity Framework 学习高级篇1—改善EF代码的方法(上)
- 2011-7-13-- entity,Entity Framework的连接字符串纯粹就是毛线
- 2010-11-24-- 日志监控,Entity Framework 缓存处理与日志监控
- 2011-7-9-- entity,Entity Framework 实践系列 —— 搞好关系 - 生儿育女(一对多,one-to-many)
- 2010-11-24-- entity,Entity Framework的默认值BUG解决方法
- 2011-3-29-- entity,我的WCF4 Rest Service及Entity Framework with POCO之旅(二)——选择请求/返回格式
- 2011-3-28-- entity,我的WCF4 Rest Service及Entity Framework with POCO之旅(一)——创建一个基本的RESTful Service
- 2011-2-21-- entity,Entity Framework快速入门--IQueryable与IEnumberable的区别
最新评论