zoukankan      html  css  js  c++  java
  • ELinq学习一

    ELinq安装:在Nuget控制台中输入:install-package ELinq
    一、ELinq与DLinq和EF的功能差异

     
    二、数据库对照表

     
    三、CRUD操作
    1、插入(Insert)
    (1)简单形式
    方法一:
    Northwinddb = new Northwind("数据库连接字符串");
    var newCustomer = new Customer
    {
        CustomerID = "XX1",
        CompanyName = "Company1",
        ContactName = "Contact1",
        City = "Seattle",
        Country = "USA"
    };
    db.Customers.Insert(newCustomer);")
    注:生成的Sql语句为:
    INSERT INTO Customers(CustomerID, ContactName, CompanyName, Phone, City, Country)
    VALUES (@p0, @p1, @p2, @p3, @p4, @p5)

    方法二:
    Model.User user = new Model.User
    {
         Name = "新记录",
         Age = 23,
         Gender = true
    };
    using (var ctx = cfg.CreateDbContext())
          ctx.Set<User>().Insert(user);
    注:生成的Sql语句为:
    INSERT INTO [User] ( [Name], [Gender],[Age] )
    VALUES (@p0, 1 , 23)

    (2)一对多关系
    说明:Orders和Customers是一对多的关系
     var newCustomer = new Customer
    {
        CustomerID = "XX4",
        CompanyName = "Company4",
        ContactName = "Contact4",
        City = "Seattle",
        Country = "USA"
    };
    var newOrder = new Order
    {  
        OrderDate = DateTime.Today,
        CustomerID=newCustomer.CustomerID
    };
    db.Customers.Insert(newCustomer);
    db.Orders.Insert(newOrder);
    注:生成的Sql语句为:
    INSERT INTO Customers(CustomerID, ContactName, CompanyName, Phone, City, Country)
    VALUES (@p0, @p1, @p2, @p3, @p4, @p5)
    INSERT INTO Orders(CustomerID, OrderDate)
    VALUES (@p0, @p1)

    (3):多对多关系
    说明:在多对多关系中我们需要依次提交

    2、更新(Update)
    方法一:
    说明:更新操作,先获取对象,进行修改操作之后,直接调用Update()方法即可提交。
    var customer= new Customer
    {
        CustomerID = "XX1",
        CompanyName = "Company1",
        ContactName = "Contact1",
        City = "Portland",
        Country = "USA"
    };
    db.Customers.Update(customer, d => d.City == "Detroit");
    语句描述:使用Update将对检索到的一个Customer对象做出的更新保持回数据库。

    方法二:
    语句描述:实例化一个Use对象(其中包含唯一的标识),是以对象的形式通过唯一标识找到该记录并更新数据库表中的记录,Update方法返回一个整型值,成功为1,否则为0。
    Model.User user = new Model.User
    {
         ID = 5,
         Name = "修改新记录",
         Age = 24,
         Gender = false
    };
    using (var ctx = cfg.CreateDbContext())   
         ctx.Set<User>().Update(user);
    注:该语句生成的sql语句为:
    UPDATE [User]
    SET [Name] = @p0, [Gender] = 0, [Age] = 24
    WHERE ( [ID] = 5 )    

    3、删除(Delete)
    方法一:
    var customer = new Customer
    {
        CustomerID = "XX1",
        CompanyName = "Company1",
        ContactName = "Contact1",
        City = "Seattle",
        Country = "USA"
    };
    db.Customers.Delete(customer);

    方法二:
    using (var ctx = cfg.CreateDbContext())
    {
       ctx.Set<User>().Delete(p=> p.ID == 5);
    }

    4、 查询(selectMany)
    适用场景:在表关系中有一对一关系,一对多关系,多对多关系。对各表之间的关系,就用这些实现对多个表的操作。

    一对多关系(1 to Many)
    var query=
        from c in db.Customers
        from o in c.Orders
        where c.City == "London"
        select o;
    语句描述:Customers和Orders是一对多的关系,即Orders在Customers类中是以IDbSet形式出现。所以第二个from是从c.Orders而不是从db.Orders中筛选。
    注:该语句生成的Sql语句为:
    SELECT t1.OrderID, t1.CustomerID AS CustomerID1,t1.OrderDate
    FROM Customers AS t0
    INNER JOIN Orders AS t1 ON (t1.CustomerID = t0.CustomerID)
    WHERE (t0.City = @p0)

    多对多关系(Many to Many)
     var q =
        (from e in db.Orders
        from et in e.Details
        from ett in db.Products.Where(o=>o.ID==et.ProductID)
        where e.CustomerID == "ALFKI"

        select new
        {
           e.CustomerID,
           et.ProductID
        }).ToList();
    语句描述:多对多连接一般会涉及三个表(如果有一个表是自连接的那就可能是2个表)。这个语句涉及三个表Orders,Order Details,Products。他们的关系是1:M:1。
    注:生成的Sql语句是:
    SELECT t0.CustomerID, t1.ProductID
    FROM Orders AS t0
    INNER JOIN [Order Details] AS t1
      ON (t1.OrderID = t0.OrderID)
    INNER JOIN Products AS t2
      ON (t2.ID = t1.ProductID)
    WHERE (t0.CustomerID = @p0)

    单表查询
    //查询所有的记录
    using (var ctx = cfg.CreateDbContext())
        ctx.Set<User>().ToArray();

    //查询ID为5的这条记录
    using (var ctx = cfg.CreateDbContext())
        ctx.Set<User>().Get(5); 
    语句描述:第一条语句是查询表中所有的记录,存储到User[]数组里面; 第二条语句查询ID为5的记录。
    注:语句生成的sql语句分别为:
    SELECT t0.[ID], t0.[Name], t0.[Gender], t0.[Age]
    FROM [User] AS t0
     
    SELECT t0.[ID], t0.[Name], t0.[Gender], t0.[Age]
    FROM [User] AS t0
    WHERE ( t0.[ID] = 5 )

    四、建立OR映射关系
    ELinq建立表之间的映射关系方法有三种:
    a. 基于标签的方式:TableAttribute;
    b. 基于命名策略的方式;
    c. 基于FluentMapping 的方式;

    参考:
    https://elinq.codeplex.com/
    http://www.cnblogs.com/netcasewqs/archive/2012/12/08/2809319.html

  • 相关阅读:
    八十四、SAP中的ALV创建之三,创建ALV表格
    八十三、SAP中的ALV创建之二,ALV相关的类型池定义
    八十二、SAP中的ALV创建之一,新建一个程序
    八十一、SAP中的ALV的简介(ABAP List Viewer)
    八十、SAP中数据库操作之 (FOR ALL ENTRIES IN )用法,比较难明白
    七十九、SAP中数据库操作之更新数据,UPDATE的用法
    七十八、SAP中数据库操作之查询条数限制
    七十七、SAP中数据库操作之多表联合查询
    七十六、SAP中数据库的查询用法之 COUNT(总数),SUM(求和),AVG(求平均),GROUP BY(分组)
    七十五、SAP中数据库的使用SQL
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754079.html
Copyright © 2011-2022 走看看