ORM组件 ELinq (二) 映射配置之Table
ELinq的默认行为是使用一系列约定将POCO类映射到表。然而,有时候,不能也不想遵循这些约定,那就需要重写它们。重写约定有三种方式:标签方式、FluentAPI和Xml方式。本篇文章中使用标签和Fluent API 两种方式,Xml方式后续介绍。
Table 配置
1) Name 属性 用来描述Table Name
默认约定: 表名和实体类名完全一致
重写方式一:使用DbConfiguration SetClassNameToTalbeName(Func<string, string> fnClassNameToTableName),表名和类名不一样,但是大部分都遵循一定的规律,比如表名都是复数,类名都是单数,那么可以自定义这种类名到表名的映射规则,少数不一致的可以通过重写方式二进行
例子:
DbConfiguration .Configure(connectionStringName) .SetSqlLogger(() => new SqlLog(Console.Out)) .SetClassNameToTalbeName(DbConfiguration.Plural);//把类名转化为复数形式的表名
重写方式二:标签方式
[Table(Name = "Order Details")] public class OrderDetail {}
重写方式三:使用Fluent Api来设置类名到表名间的映射,例如 把OrderDetail 实体类名映射到表名为:Order Details
DbConfiguration .Configure(connectionStringName) .SetSqlLogger(() => new SqlLog(Console.Out)) .AddClass<OrderDetail>(p => { p.TableName("Order Details"); });//注册映射类
2)Readonly 属性用来描述表是否是只读的
默认约定:false, 表示可以增删改查
重写方式一:标签方式
[Table(Name = "Order Details",Readonly=true)] public class OrderDetail
重写方式二:Fluent API
p.TableName("Order Details").Readonly();
3) Schema 属性,数据库schema名称,可选的
默认约定:null
重写方式一:标签方式
[Table(Name = "Order Details",Readonly=true, Schema="dbo")] public class OrderDetail
重写方式二:Fluent API
p.TableName("Order Details").Readonly().Schema("dbo");
完整的基于Lambda表达式的Fluent API配置代码如下:
static DbConfiguration dbConfiguration3 = DbConfiguration .Configure(connectionStringName) .AddClass<OrderDetail>(p => { p.TableName("Order Details").Readonly().Schema("dbo"); });
完整的基于ClassMap的Fluent API配置代码如下:
class OrderDetailMap : ClassMap<OrderDetail> { public OrderDetailMap() { TableName("Order Details") .Readonly() .Schema("dbo"); } } static DbConfiguration dbConfiguration2 = DbConfiguration .Configure(connectionStringName) .AddClass(new OrderDetailMap());
总结:表名映射原则: 默认情况下表名和实体类名完全一致,如果不一致但是大部分都遵循一定的规律,比如表名都是复数,类名都是单数等,那么可以通过通过SetClassNameToTalbeName策略方法来进行,针对个别不一致情况可以通过TableAttribute标签来制定,或者通过自定义ClassMap来进行,也可以通过XML方式进行统一配置
技术支持:
- 官方网站
- Nuge 下载页面
- ORM组件 ELinq系列
- ORM组件 ELinq 更新日志
- ORM组件 ELinq 使用答疑
- 在我的博客留言,我会尽可能地抽时间来答复大家的问题。
- 加入 ELinq用户的 QQ群(271342583)。
谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^