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

推荐订阅源

D
Docker
I
InfoQ
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
博客园_首页
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
C
Check Point Blog
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Engineering at Meta
Engineering at Meta
B
Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
F
Fortinet All Blogs
月光博客
月光博客
GbyAI
GbyAI

博客园 - 风云

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 NLite 更新日志 ORM组件 ELinq 更新日志 ORM组件 ELinq (二) 映射配置之Table 用户中心 - 博客园 ORM组件 ELinq 系列 国内开源ORM组件 ELinq正式版发布 ORM组件 ELinq (一)首航之旅 年度开源力作-ORM组件 ELinq诞生了
ORM组件 ELinq (三)-映射配置之Attribute
风云 · 2013-01-01 · via 博客园 - 风云

  ELinq 发布后,由于公司的项目比较忙,就没有时间进行撰写博文进行介绍,望大家见谅,现在元旦了该抽时间把ELinq的系列补充补充,该篇介绍Attribute的映射配置。

     Attribute的映射配置方式和LinqToSQL的配置方式类似,不用太多的笔墨进行介绍每个Attribute的含义,直接用代码说话。 (以Northwind数据库的Customers表和Orders 表为例,客户和订单是一对多关系为例)

    [Table(Name = "Customers")]
    public class Customer
    {
        [Id(Name="CustomerId")]//主键映射
        public string Id;

        [Column]public string ContactName;
        [Column]public string CompanyName;
        [Column]public string City;
        [Column]public string Country;

        [Ignore]public string Phone;//忽略,不映射该字段
    }

    [Table(Name = "Orders")]
    public class Order
    {
        [Id(IsDbGenerated = true)]//该主键是自动增一
        public int OrderID;

        [Column]public string CustomerID;//外键字段
        [Column]public DateTime OrderDate;
    }
 
    public class Northwind : DbContext
    {
        //连接字符串名称:基于Config文件中连接字符串的配置
        const string connectionStringName = "Northwind";

        //构造dbConfiguration 对象
        static DbConfiguration dbConfiguration = DbConfiguration
                .Configure(connectionStringName)
                .SetSqlLogger(() => new SqlLog(Console.Out))
                .AddClass<Customer>()
                .AddClass<Order>()
                ;
        public Northwind() : base(dbConfiguration) { }
    
        public readonly IDbSet<Customer> Customers;
        public readonly IDbSet<Order> Orders;
    }

  这样就非常简单的完成了OR映射,看到这里可能有人会问一对多怎么映射,比如Customer实体类里面有多个Order实体?其实也一样简单,看代码

[Table(Name = "Customers")]
    public class Customer
    {
        [Id(Name="CustomerId")]//主键映射
        public string Id;

        [Column]public string ContactName;
        [Column]public string CompanyName;
        [Column]public string City;
        [Column]public string Country;

        [Ignore]public string Phone;//忽略,不映射该字段

        //一对多映射,ThisKey:Customer.Id,OtherKey:Order.CustomerID
     [Association(ThisKey
="Id", OtherKey="CustomerID")]
public IList<Order> Orders; }

  既然一对多可以,那么多对一是不是也可以,当然,看代码

   [Table(Name = "Orders")]
    public class Order
    {
        [Id(IsDbGenerated = true)]//该主键是自动增一
        public int OrderID;

        [Column]public string CustomerID;
        [Column]public DateTime OrderDate;

        //一对多映射,ThisKey:Order.CustomerID,OtherKey:Customer.Id
[Association(ThisKey
= "CustomerID", OtherKey = "Id")] public Customer Customer; }

    通过上面的例子想必大家对ELinq基于Attribute的配置方式有了一个了解:

  1.      TableAttribute:映射表名
  2.      IdAttribute:映射主键的, IsDbGenerated=true 属性标致主键是自动增一的
  3.      IgnoreAttribute:忽略映射的
  4.      ColumnAttribute: 映射列的
  5.      AssociationAttribute:映射关系的,一对多,多对一,一对一都用这一个标签

    下一节将介绍 基于Fluent API的映射方式。

  技术支持:

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

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