C# 中的类关联(多对多关系)

Posted

技术标签:

【中文标题】C# 中的类关联(多对多关系)【英文标题】:Class Association in C# (many to many relation) 【发布时间】:2018-08-17 20:12:06 【问题描述】:

我正在尝试找出类关联(多对多关系)。

在给定的示例中,关系定义为客户可以去许多分支机构,而分支机构可以有很多客户。

我将List<Customer> 定义为Branch 类中的属性,并将List<Branch> 定义为customer 类中的关联。

这部分还不错,但我无法显示哪个客户去哪个分支机构或哪个分支机构有特定客户。

我尝试了 linq quires 和 foreach 循环来获得所需的结果,但我无法获得它们。请帮帮我。

class Branch

    public string BranchName  get; set; 
    public string BranchAddress  get; set; 

    public List<Customer> Customers  get; set; 

    public void SetCustomerAssociation(List<Customer> customers)
    
        Customers = customers;
    


class Customer

    public string CustomerName  get; set; 
    public string CustomerAddress  get; set; 
    public string CustomerEmail  get; set; 

    public List<Branch> Branches  get; set; 

    public void SetBranchAssociation(List<Branch> branches)
    
        Branches = branches;
    


class Program

    public static void Main(string[] args)
    
        List<Branch> Branches = new List<Branch>(100);
        List<Customer> Customers = new List<Customer>(100);

        var branch = new Branch();
        Branches.Add(branch);

        var customer = new Customer();
        Customers.Add(customer);

        branch.SetCustomerAssociation(Customers);
        customer.SetBranchAssociation(Branches);
    

【问题讨论】:

我认为没有人理解你的问题。您能否添加您的尝试甚至伪代码来演示您正在尝试做什么? 我的问题是我在两个类中创建了一个列表属性来显示它们之间的多对多关联,但我无法找出哪个分支有特定的客户或女巫有特定的分支?就像一个特定的客户访问了特定商店的多少个分支,例如耐克商店的分支......总而言之,我应该能够看到哪个客户属于哪个分支? 【参考方案1】:

如果你有这样的关系,你不需要任何循环来让女巫 Branch 有特定的 Customer 或女巫 Customer 有特定的分支。

您可以通过 Customer.BranchesBranch.Customers 获得所有这些信息。

当然你可以写另外一个方法,比如 Customer.HasBranch(Branch branch),它可能看起来像这样:

class Customer

   ..
  public Branch HasBranch(Branch branch) => Branches.FirstOrDefault(b => b == branch);

但您必须记住,如果您想删除某个分支,您必须始终将其从列表中包含该分支的所有客户中删除,反之亦然。我认为如果您创建一些包含 BranchCustomer 的新类并通过此类绑定它们会是更好的解决方案。

【讨论】:

感谢您的帮助。我还有一个问题。我想从用户那里获取输入并在列表中添加多个客户。我如何创建多个客户对象,然后将其添加到列表中。记住用户提供输入。我试过了,但列表只会显示最后添加的客户.. ?? 我不明白你的意思。您想在哪个列表中添加您的客户?您的用户输入看起来如何?如果您向列表中添加类似 users.Add(new User()) 的内容多次,您的列表将包含所有添加的用户。

以上是关于C# 中的类关联(多对多关系)的主要内容,如果未能解决你的问题,请参考以下文章

关联映射 ---- Hibernate之多对多关系

Hibernate多表关系配置——多对多对关系映射

Hibernate的多对多关联关系

TP中的模型关联的多对多关系

通过 SQLAlchemy 选择多个多对多关系

查询显示多对多关系中的关联列表