Entity Framework 4的單複數自動識別功能

Entity Framework 4增加了一個新功能--Pluralization,在Entity Data Model Wizard中能偵測資料表名稱的單複數性質,以便在產生EF類別時貫徹"EntityObject名稱用單數,ObjectSet<EntityObject>名稱用複數"的原則。也說是說,如果資料庫有個資料表名稱是User,則個體類別名稱會是User,集合類別是Users;但如果資料表名稱本身已經是複數,例如: Fishes,一樣會個體類別名稱會用單數Fish,集合類別名稱用複數Fishes。

用實例來示範: 資料庫中有三個資料表要轉成EF類別,分別是Fishes、Products、Story,兩個複數、一個單數,而且故意挑 加es、加s、y改ies 三種單複數變化,考驗EF4的能耐。

轉換結果顯示,這點考驗對喝洋墨水長大的EF4只是一塊蛋糕,三個Table的對應類別被正確地解析成Fish/Fishes、Story/Stories、Product/Produts,不管Table名稱是單數或複數,在宣告類別時一律EntityObject名稱取單數、ObjectSet<EntityObject>集合名稱取複數。

排版顯示純文字
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LabModel;
 
public class Class1
{
    public Class1()
    {
        using (var ctx = new LabModel.LabEntities())
        {
            //EntityObject的名稱是Fish
            var fish = new Fish();
            //ObjectSet<Fish>的名稱是Fishes
            var fishes = ctx.Fishes;
 
            //EntityObject的名稱是Story
            var story = new Story();
            //ObjectSet<Story>的名稱是Stories
            var stories = ctx.Stories;
 
            //EntityObject的名稱是Product
            var product = new Product();
            //ObjectSet<Product>的名稱是Products
            var products = ctx.Products;
        }
    }
}

由於英文名詞的單複數轉換有一些特殊規則,th/sh結尾要加es、y結尾要改ies... 等等。EF4新增了一個PluralizationService類別專門處理,甚至可針對不同語系提供各種語言的單複數規則。只是開發程式時,類別名稱多半還是以英文為主,EntityObject叫"使用者"、"主機",集合名稱叫"使用者們"、"主機群"? 感覺怪怪的。

以下是個有趣的測試網頁,輸入英文名詞後呼叫PluralizationService找出單數及複數形式的名稱。

排版顯示純文字
<%@ Page Language="C#" %>
<%@ Import Namespace = "System.Data.Entity.Design.PluralizationServices" %>
<%@ Import Namespace = "System.Globalization" %>
 
<!DOCTYPE html>
 
<script runat="server">
    protected void btnConv_Click(object sender, EventArgs e)
    {
        var ps = PluralizationService.CreateService(
                    CultureInfo.GetCultureInfo("en-us"));
        string name = txtName.Text;
        lblResult.Text = 
            string.Format("單數 = {0}  /  複數 = {1}",
                ps.IsSingular(name) ? name : ps.Singularize(name),
                ps.IsPlural(name) ? name : ps.Pluralize(name)
            );
    }
</script>
 
<html>
<head runat="server">
    <title>EF4 Pluralization Test</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
    <asp:Button ID="btnConv" runat="server" Text="轉換" onclick="btnConv_Click" />
    <br />
    <asp:Label ID="lblResult" runat="server"></asp:Label>
    </form>
</body>
</html>

PluralizationService並非內建整套牛津字典收藏整套英文單複數字彙,而是透過一些規則依英文字尾決定單複數如何變形,再加入一些特例。所以就算輸入一些稀奇古怪不存在的英文字,它也能依一般常規轉換出符合習慣的用字,應用在程式開發上已十分足夠。

http://blog.darkthread.net/post-2012-07-26-ef-pluralization.aspx

EF 单复数自动识别功能相关推荐

  1. 用php造了一个地址自动识别功能

    用php造了一个地址自动识别功能 地址自动识别现在普遍,特别是用在快递填写地址,姓名,手机号码的时候,会把这些按照一定的规范填写后,点击自动识别后,会自动填写到各自的input.最近也简单的实现了这个 ...

  2. 网上阅卷系统自动识别功能代码

    想让自己轻松点就要让计算机多为你做点!  前几天一个朋友找到我让我做一个网上阅卷系统,就是实现这么几个功能:高速扫描仪扫描试卷后得到一张一张的图片,软件的功能就是处理图片,计算成绩.再详细点就是自动识 ...

  3. 如何定制一款12306抢票浏览器——处理预订页面和验证码自动识别功能

    判断是否进入预订页面 我们先看一下预订页面的结构(转载请指明出于breaksoftware的csdn博客) 可以见得,这个页面也是嵌入了两个IFrame.关于IFrame的跨域问题,我已经在前一篇文章 ...

  4. 发票自动识别功能前端开发(多表单动态生成)

    一.先上效果图(全部代码见文章尾部) 二.整体思路 上面部分是v-for遍历生成走马灯的item标签(el-carousel-item),el-form放在每个标签里面去动态生成. 底部是自己写的一个 ...

  5. 安卓webView实现长按二维码的自动识别功能

    前面我还以为微信二维码按住会有识别图中二维码功能,结果去微信里面按住二维码是真心没有效果. 然后发现微信一般实现这功能都是在网页里,然后说是getHitTestResult()这个方法可以获取点击的内 ...

  6. EF中数据优先,模型优先和代码优先

    看了很多文章也不是很明白,说的都太书面化了,大家看看这图一下子就明白了,哈哈 其实看图很简单,database first和model first都是通过 data model创建的edmx文件,只不 ...

  7. java 拉姆表达式_强大的拉姆表达式转Sql 类库 - SqlSugar 隐藏功能之Lambda

    使用场景 1.Lambda to sql 一直是ORM中最难的功能之一,如果有现成的解析库那么自已写一个ORM难度将大大降低 2.通过Lambda作为KEY进行缓存操作,特别是仓储模式想要拿到表达式进 ...

  8. 机动车号牌图像自动识别技术规范

    前 言. III 1 范围. 1 2 规范性引用文件. 1 3术语和定义. 1 4 技术要求. 1 5 接口函数. 2 6 信息交换格式. 3 前 言 本标准的全部技术内容为强制性. 本标准由公安部交 ...

  9. 根据数据库表gengxin实体类_ASP.NET开发实战——(十二)数据库之EF Migrations

    在开发数据库应用程序的时候,经常会遇到某些表需要添加字段或者修改类型.新增表等需求,而对于EF Code First来说关注的只有实体类,当需求变更时只需要添加新的实体类或者在实体类中添加.删除.修改 ...

最新文章

  1. python并发发送http请求_用python异步发送http请求来提升效率
  2. 家长不知道孩子在学校学的咋样,怎么能得行?
  3. 远程桌面连接“发生身份验证错误。 无法连接到本地安全机构”解决方法
  4. angular代码分析之异常日志设计
  5. Object.defineProperty()方法的用法详解
  6. 报错解决方案:ERROR: Cython.Build.cythonize not found.
  7. ifstream note
  8. get pid and kill
  9. error2---BeginPath和EndPath之间的TextOut无法显示
  10. QT使用SQLite数据库实现登录功能
  11. 关于配置中心的几个问题
  12. 音频特效:Flanger 和 Chorus
  13. iPhone 14 Pro影像规格曝光:升级48MP主摄 镜头模组也大了
  14. Favicon尺寸?
  15. 微信退款读取resource下的证书(apiclient_cert.p12)获取不到问题
  16. 演示:扩展ACL的配置与应用技巧
  17. java开发spc分析软件,告诉你们什么才叫真的SPC软件?
  18. 创客匠人直播升级服务,打造主流直播课堂​
  19. Week 2 Sequence Labelling
  20. U盘文件夹病毒,.exe病毒删除方法

热门文章

  1. 招标、投标、竞标、中标的概念整理
  2. Apache Tomcat版本支持java版本
  3. 5G高铁网络新架构及天馈发展趋势研究
  4. 蓝桥杯计算机软件大赛什么时间,蓝桥杯软件大赛培训总结
  5. Python廖雪峰--面相对象高级编程学习
  6. 钛资本研究院:智能经济,数字经济学视角的范式变革
  7. 计算机英语 邮件,英文电子邮件模板(英文email).doc
  8. python字符串格式化深入详解(四种方法)
  9. 西安电子科技大学833真题_院校专业课真题分享西安电子科技大学931信号与线性系统...
  10. 谁能引领国内人工智能芯片产业突围?