【问题标题】:Can I populate multiple tables from one poco?我可以从一个 poco 填充多个表吗?
【发布时间】:2018-01-17 13:51:10
【问题描述】:

我正在调查使用 ORM 来访问我们的 DataVault。到目前为止,PetaPoco 看起来最有前途,但我并不局限于那个。

我们识别的大多数对象都嵌入在 Hub 和 Sat 的组合中,其中 Hub 包含 BusinessKey,而 Sat 包含附加信息。在 poco 中,它看起来像这样(简化):

// hub: H_Client
// sat: HS_Client
class Client 
{
     public string ClientId_BK  { get; set; }  // BusinessKey in the Hub

     public long H_Client_SeqId { get; set; }  // PK/Identity in Hub, FK in the Sat

     public string? Address     { get; set; }  // additional attr. in the Sat
     public string? Phone       { get; set; }  // additional attr. in the Sat
     /* and a lot more attributes */
}

因此,每当我们谈论客户时,它总是涉及到集线器与其周六的结合。 通常,ORM 一次连接一个表,但这对于数据保险库不是很有用:您总是希望查询或插入具有适用 Sat 的 Hub。

是否可以从一个 poco 更新或插入多个表?

【问题讨论】:

  • 根据我的经验,Petapoco 在加入表格时简直就是地狱。我不清楚您的查询到底是什么样的。在 Petapoco 中,简单地分配或过滤外键是微不足道的。或者您的意思是您想在查询客户端时从 Sat 表中提取显示的地址和电话?
  • 通常,您会选择或插入(当它不存在时)一条记录到 hub 表中,检索标识并在 sat 表中插入一条标识为 FK 的新记录。出于测试目的,我想用 poco 来做这件事,因为它们比原始查询更容易交互。
  • 任何微 ORM 都不是真正的 ORM,但是无论有没有 ORM,我都会在数据库中创建一个正确命名的视图(sql)来隐藏所有连接然后查询它(作为表)

标签: c# sql-server petapoco micro-orm


【解决方案1】:

使用ResultColumn 检索信息很简单,但对于插入/更新,您需要添加自己的逻辑(在两个表中插入事务等)。

请记住,这种小型、高性能的 ORM 本来就是简单的。

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多