zoukankan      html  css  js  c++  java
  • ORM组件 ELinq (三)映射配置之Attribute

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

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

  • 相关阅读:
    第九章 读书笔记
    第八章 读书笔记
    第七章 读书笔记
    第六章 读书笔记
    第五章 读书笔记
    第四章读书笔记
    第三章读书笔记
    第九章 硬件抽象层:HAL
    第10章 嵌入式linux的调试技术
    第八章 蜂鸣器驱动
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/2841537.html
Copyright © 2011-2022 走看看