zoukankan      html  css  js  c++  java
  • 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)。

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

  • 相关阅读:
    [支付]银联支付(对jdk有要求,最好直接使用jdk7)
    [支付]支付宝支付(网银在线支付)
    Eclipse编辑窗口放大缩小的快捷键
    jQuery Validation Engine 表单验证
    Eclipse能否把选中的一段代码向前或向后缩进一个tab的位
    hql查询技巧
    Web桌面端
    大型网站技术架构
    FastDFS--分布式文件系统
    消息队列
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/2819253.html
Copyright © 2011-2022 走看看