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

技术支持:

  1. 官方网站
  2. Nuge 下载页面
  3. ORM组件 ELinq系列
  4. ORM组件 ELinq 更新日志
  5. ORM组件 ELinq 使用答疑
  6. 在我的博客留言,我会尽可能地抽时间来答复大家的问题。
  7. 加入 ELinq用户的 QQ群(271342583)。

   谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^

posted @ 2012-12-15 14:50  风云  阅读(2322)  评论(0编辑  收藏  举报