惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
V
V2EX
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
小众软件
小众软件
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
The Cloudflare Blog
T
Tailwind CSS Blog
H
Help Net Security
腾讯CDC
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
C
Check Point Blog
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 风云

Vane.Dispatch 1.0.0 发布:一个与容器、传输层零耦合的 .NET 服务分发引擎 MiniLog 1.0 GA 发布:零分配、零依赖的 .NET 高性能日志框架 从实战到生产:Acl.Excel 八大场景与避坑指南(终篇) 写入分配砍掉 63%:Acl.Excel 绕过 XmlWriter 字节直写 零依赖纯 C# DEFLATE 引擎:2916 行移植 libdeflate 一个 42KB 的 Excel 如何撑爆 4.5PB?Acl.Excel 8 层防御 Acl.Excel 跨库基准:读取最高快 32.8 倍 24B消灭上亿次装箱:Acl.Excel零装箱设计 百万行Excel如何恒定内存?Acl.Excel流式拆解 不依赖 NPOI/ClosedXML,纯 C# Excel 库如何做到 30 倍性能? 2-30 倍性能:Acl.Excel 设计哲学与零依赖 Acl.Excel vs MiniExcel 1.45.0:百万行读写实测,托管内存低至 1/37,QueryFirst 平分秋色 优化纯 C# DEFLATE 压缩器:从 0 到超越 .NET 内置的完整历程 从零实现 DEFLATE 压缩器:纯 C# 移植版如何在 Excel 场景超越 .NET 内置? Docker下构建centos7容器无法使用systemctl命令的解决办法 重新诠释的OSGi规范 让我们的领域逻辑彻底裸奔吧 NLite.Web 组件更新日志 Ndf 组件更新日志 新年首作-ELinq+T4模版引擎制作多文件实体代码生成器 ORM组件 ELinq (五)-映射配置之XML ORM组件 ELinq (四)-映射配置之FluentAPI ORM组件 ELinq (三)-映射配置之Attribute NLite 更新日志 ORM组件 ELinq 更新日志 用户中心 - 博客园 ORM组件 ELinq 系列 国内开源ORM组件 ELinq正式版发布 ORM组件 ELinq (一)首航之旅 年度开源力作-ORM组件 ELinq诞生了
ORM组件 ELinq (二) 映射配置之Table
风云 · 2012-12-15 · via 博客园 - 风云

  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)。

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