您的位置:首页 > 其它

ORM组件 ELinq (二) 映射配置之Table

2012-12-15 14:50 253 查看
  ELinq的默认行为是使用一系列约定将POCO类映射到表。然而,有时候,不能也不想遵循这些约定,那就需要重写它们。重写约定有三种方式:标签方式、FluentAPI和Xml方式。本篇文章中使用标签和Fluent API 两种方式,Xml方式后续介绍。

Table [b]配置[/b]

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方式进行统一配置

技术支持:

[b][b]官方网站 [/b][/b]

[b][b]Nuge 下载页面[/b][/b]

[b][b]ORM组件 ELinq系列[/b][/b]

[b][b]ORM组件 ELinq 更新日志[/b][/b]

ORM组件 ELinq 使用答疑

在我的博客留言,我会尽可能地抽时间来答复大家的问题。

加入 ELinq用户的 QQ群(271342583)。

谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: