gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:32 24 4
gpt4 key购买 nike

我有一个名为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com