【问题标题】:How to Implement classes to be used by dapper in C#如何在 C# 中实现 dapper 使用的类
【发布时间】:2021-02-06 19:49:41
【问题描述】:

我只有一个简单的问题,就是如何从数据库中为这些表创建类,这些类将被 dapper 使用,任何类型的实现都有效,不管是你的人员还是行业标准,就足够了几乎没有经验的新开发人员可以使用它执行粗鲁操作

(这不是实验的问题,因为起跑线是我不知道如何做这些,并且绝对没有来源解释我需要什么,我一直在互联网上搜索,信不信由你一个月,我很感谢你关心我只是尝试和搜索,但我必须恭敬地拒绝没有冒犯的意思,我只是想粗鲁,我希望这不会占用你太多时间

 public class mem                                     (main table to which every table connects)
{
public int Mem_id {get;set;}
public string Mem_name {get;set;}
public string Mem_gndr {get;set;}
public DateTime Mem_dob {get;set;}
//public int adrs_adrs_id {get;set;}
//public int union_union_id {get;set;}
//public int alot_alot_id {get;set;}
}

public class adrs                            (one to one mandatory relationship with mem table)
{
public int adrs_id {get;set;}
public string adrs_col1 {get;set;}
public string adrs_col2 {get;set;}
}


public class alot                        (one to one optional relationship with mem table)
{
public int alot_id {get;set;}
public string alot_no {get;set;}
}

public class union                           (one to many mandatory relationship with mem table)
{
public int union_id {get;set;}
public string union_nm {get;set;}
}



 public class ci                       (one to many optional relationship with mem table)
{
public int ci_id {get;set;}
public string ci_mob {get;set;}
public string ci_eml {get;set;}
//public int mem_Mem_id {get;set;}
}

 public class flat                                  (many to many relationship with mem table)
{
public int flat_id {get;set;}
public string flat_type {get;set;}
}

   public class mem_has_flat                      (this is the bridge class between mem and flat)
  {                                                (many to many relationship bridge)
    //public int mem_Mem_id {get;set;}
    //public int flat_flat_id {get;set;}
  }

)

我已经编写了代码,格式正确,你一定明白我在哪里有问题,它是连接属性,注释掉的是双斜杠的问题

这花了我很多时间来写请帮忙,我知道乞求删除了这个问题,但我只是想表明我已经完成了我的研究,并尽我所能解释了,让它保持原样不要编辑它,谦虚的请求????

我的意思是没有不尊重我只是没有时间被严重卡住

【问题讨论】:

  • 使用来自 Dapper.Crud 或 Peta POCO 的 T4 模板进行研究以生成类。
  • 感谢您对@DanielP 的回复,我真的很想感谢您,没有人回复有人甚至否决了它,我已经搜索了您问我的内容,但它不是实体框架吗? ,而且大部分东西都是非常先进的,因为我检查了许多与此相关的链接,这就是为什么我想要某人编辑我编写的类属性以使其正确,我可以通过查看这段代码来实现它们,但似乎没有人正在帮助,感谢您再次回复
  • 安装 Dapper.SimpleCrud nuget 包以获取 T4 模板以生成代表现有数据库表的类。它不是实体框架。生成类后,就可以开始学习 Dapper 教程了。

标签: c# class properties dapper


【解决方案1】:

使用 Dapper 最简单的方法是不要尝试与表进行一对一的映射。相反,构建映射到您的查询的业务领域实体。我不太了解您的架构(mem 是成员还是与内存有关)。

请考虑一个具有三个表的经典订单系统:Customer、Order 和 Order_Item。

Customer
    Customer_Id int,
    Customer_Name varchar(50)
    -- etc 

Order 
    Order_Id int,
    Customer_Id int,
    Order_Date DateTime,
    -- etc

Order_Item
    Order_Item_Id int,
    Order_Id int,
    Item_Name varchar (50),
    Item_Description varchar(500),
    Item_Sold_Price decimal(12, 2),
    Item_Quantity int,
    --etc

我在该描述中省略了可空性、索引和 FK 信息。

现在考虑您想向用户显示他们最近购买的 10 件商品的列表,并显示购买日期

SELECT TOP (10)
    o.OrderDate as PurchasedDate,
    oi.Item_Name as Item,
    oi.Item_Description as Description, 
    oi.Item_Quantity as Quantity, 
    oi.Item_Sold_Price as Price
FROM Order_Item oi
INNER JOIN Order o ON o.Order_Id = oi.Order_Id
INNER JOIN Customer c ON c.Customer_Id = o.Customer_Id
WHERE c.Customer_Id = @Customer_Id

通过该查询,我准备了一个看起来像这样的类

public class CustomerOrderItems {
    public DateTime PurchasedDate { get; set; }
    public string Item { get; set; }
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
}

请注意,成员名称和类型与查询结果集的列名称和类型相匹配。现在,假设您在名为 query 的字符串变量中拥有该查询,在名为 customerId 的变量中拥有客户 ID,您可以使用

var results = sqlConn.Query<CustomerOrderItems>(query, new {Customer_Id = customerId});

之后,results 将包含一个 IEnumerable&lt;CustomerOrderItems&gt;,最多包含十个结果。

【讨论】:

  • 在那次投反对票后我有点放弃了,你只是在一个答案中填补了我理解中的所有空白,我真的受够了,因为像你这样的人,我们新开发者可以得到在某个地方,谢谢你,我真的做了这么久,再次感谢你@Flydog57
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 2018-01-26
  • 2010-10-19
  • 2012-02-20
  • 2023-03-24
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
相关资源
最近更新 更多