EF 单复数自动识别功能
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 单复数自动识别功能相关推荐
- 用php造了一个地址自动识别功能
用php造了一个地址自动识别功能 地址自动识别现在普遍,特别是用在快递填写地址,姓名,手机号码的时候,会把这些按照一定的规范填写后,点击自动识别后,会自动填写到各自的input.最近也简单的实现了这个 ...
- 网上阅卷系统自动识别功能代码
想让自己轻松点就要让计算机多为你做点! 前几天一个朋友找到我让我做一个网上阅卷系统,就是实现这么几个功能:高速扫描仪扫描试卷后得到一张一张的图片,软件的功能就是处理图片,计算成绩.再详细点就是自动识 ...
- 如何定制一款12306抢票浏览器——处理预订页面和验证码自动识别功能
判断是否进入预订页面 我们先看一下预订页面的结构(转载请指明出于breaksoftware的csdn博客) 可以见得,这个页面也是嵌入了两个IFrame.关于IFrame的跨域问题,我已经在前一篇文章 ...
- 发票自动识别功能前端开发(多表单动态生成)
一.先上效果图(全部代码见文章尾部) 二.整体思路 上面部分是v-for遍历生成走马灯的item标签(el-carousel-item),el-form放在每个标签里面去动态生成. 底部是自己写的一个 ...
- 安卓webView实现长按二维码的自动识别功能
前面我还以为微信二维码按住会有识别图中二维码功能,结果去微信里面按住二维码是真心没有效果. 然后发现微信一般实现这功能都是在网页里,然后说是getHitTestResult()这个方法可以获取点击的内 ...
- EF中数据优先,模型优先和代码优先
看了很多文章也不是很明白,说的都太书面化了,大家看看这图一下子就明白了,哈哈 其实看图很简单,database first和model first都是通过 data model创建的edmx文件,只不 ...
- java 拉姆表达式_强大的拉姆表达式转Sql 类库 - SqlSugar 隐藏功能之Lambda
使用场景 1.Lambda to sql 一直是ORM中最难的功能之一,如果有现成的解析库那么自已写一个ORM难度将大大降低 2.通过Lambda作为KEY进行缓存操作,特别是仓储模式想要拿到表达式进 ...
- 机动车号牌图像自动识别技术规范
前 言. III 1 范围. 1 2 规范性引用文件. 1 3术语和定义. 1 4 技术要求. 1 5 接口函数. 2 6 信息交换格式. 3 前 言 本标准的全部技术内容为强制性. 本标准由公安部交 ...
- 根据数据库表gengxin实体类_ASP.NET开发实战——(十二)数据库之EF Migrations
在开发数据库应用程序的时候,经常会遇到某些表需要添加字段或者修改类型.新增表等需求,而对于EF Code First来说关注的只有实体类,当需求变更时只需要添加新的实体类或者在实体类中添加.删除.修改 ...
最新文章
- python并发发送http请求_用python异步发送http请求来提升效率
- 家长不知道孩子在学校学的咋样,怎么能得行?
- 远程桌面连接“发生身份验证错误。 无法连接到本地安全机构”解决方法
- angular代码分析之异常日志设计
- Object.defineProperty()方法的用法详解
- 报错解决方案:ERROR: Cython.Build.cythonize not found.
- ifstream note
- get pid and kill
- error2---BeginPath和EndPath之间的TextOut无法显示
- QT使用SQLite数据库实现登录功能
- 关于配置中心的几个问题
- 音频特效:Flanger 和 Chorus
- iPhone 14 Pro影像规格曝光:升级48MP主摄 镜头模组也大了
- Favicon尺寸?
- 微信退款读取resource下的证书(apiclient_cert.p12)获取不到问题
- 演示:扩展ACL的配置与应用技巧
- java开发spc分析软件,告诉你们什么才叫真的SPC软件?
- 创客匠人直播升级服务,打造主流直播课堂​
- Week 2 Sequence Labelling
- U盘文件夹病毒,.exe病毒删除方法
热门文章
- 招标、投标、竞标、中标的概念整理
- Apache Tomcat版本支持java版本
- 5G高铁网络新架构及天馈发展趋势研究
- 蓝桥杯计算机软件大赛什么时间,蓝桥杯软件大赛培训总结
- Python廖雪峰--面相对象高级编程学习
- 钛资本研究院:智能经济,数字经济学视角的范式变革
- 计算机英语 邮件,英文电子邮件模板(英文email).doc
- python字符串格式化深入详解(四种方法)
- 西安电子科技大学833真题_院校专业课真题分享西安电子科技大学931信号与线性系统...
- 谁能引领国内人工智能芯片产业突围?