c# - 在 C# 对象中显示外键对象名称的最佳实践

标签 c# ado.net webforms

我有一个名为 GetCustomer 的方法,它返回一个 Customer 对象。

客户对象如下。

Public class Customer
{
  public int Id { get; set;}
  public string Name { get; set;}

  public int CompanyId { get; set;}
}

假设客户与一家公司有关,我必须在屏幕 UI 上显示此客户信息。现在,当我调用 GetCustomer 方法时,我只取回有关客户的详细信息。在屏幕上,我还需要显示该客户所属的companyname

一个简单的方法是在客户对象中有一个名为 CompanyName 的属性,并从您的数据层方法中填充它。但我不确定这是否是最佳做法。如果客户也属于 department,现在我需要将 DepartmentIdDeptName 作为属性。 ID 是必须的,因为有时我需要发送 Id 以获取完整的部门/公司对象。

我不想在 Customer 对象中包含 Department and Company 的完整对象。

我假设这是一个常见的场景,其中一个特定对象使用 ID 链接到其他对象,当您带回主要对象时,您只需要显示其他链接对象的名称。

处理此问题的最佳方法是什么。我的主要目的是避免(或更多)额外的数据库调用。

我没有使用 Linq 或 Entity Framework,只是普通的 ADO.NET

最佳答案

这种情况取决于您的目标;

1 - 如果你想避免额外的数据库调用,你必须通过你的数据库通信器只用一个实例来编写你的用户界面,只打开它一次并在每次制作后刷新它的成员(适配器,命令等)数据库调用并在数据传输结束时关闭连接。

2 - 对于您问题的其他目的,请使用延迟加载。仅将 id 放在您的实体上,并在需要时初始化和使用该 id 的所属实体!

例如:

public class Customer
{
  public int Id { get; set;}
  public string Name { get; set;}

  public int CompanyId { get; set;}
}

public class Company
{
  public int CompanyId;
  //company fields
}

// .. on your business layer if you need to use Company data:
// examine your Customer instance as "customer"

Company userCompany = GetCompanyWithId(customer.CompanyId);

但正如您所猜测的那样,要加载的数据取决于您的需要。想想简单。如果您只需要部门和公司名称,那么您可以在您的数据库上创建一个 View 并可以在您的代码中调用它。您可以创建一个实体作为 CustomerWithFullData,您可以在该实体中放置一个客户和一个部门等,当您需要显示完整数据时,您可以使用 DB View 填充它。或者不用费心创建实体。如果不需要entity,直接调用DB View DataSet,绑定(bind)Tables。因此,您可以将数据收集工作转移到 DB,这就是我们想要做的。

正如我之前所说,想简单。

关于c# - 在 C# 对象中显示外键对象名称的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8361065/

相关文章:

c# - 循环内 SqlConnection 的最佳方式

c# - XPath获取youtube视频C#

javascript - 如何在母版页的内容页中使用 jQuery 函数?

c# - 有没有办法将 Viewbag 对象从 Mvc 传递到 webforms 用户控件代码隐藏?

c# - 默认构造函数和无参数构造函数之间的区别?

.net - 如何判断DataRow中是否存在某列?

vb.net - 从类型 'DBNull' 到类型 'Decimal' 的转换无效

c# - 启用 ODP.Net 日志记录

asp.net - 如何创建可在 FormView 模板中使用的 BoundField 之类的内容?

c# - 在 Delphi 2007 中使用 SDK BSOD 但在 C# 中工作的应用程序