如何写一个到多个类c#

时间:2016-08-09 12:07:51

标签: c#

这是我的问题:我需要代表一对多的关系。一家公司有很多商店。 这是我的代码:

public class Company 
{
    public int Id;

    public string Name;

    public string Email;

    public Guid GUID;
}

public class Store 
{

    public int Id;

    public int CompanyId;

    public string Name;

    public int NoOfEmployees;

    public Guid GUID;
}

我的问题是:如何在不使用虚拟和散列集的情况下工作?这个实现好吗?

谢谢。

4 个答案:

答案 0 :(得分:3)

您只需使用List即可保存一家公司的所有商店。

public class Company 
{
    public int Id;

    public string Name;

    public string Email;

    public Guid GUID;
    // List of all Stores
    public List<Store> AllTheStores;

    public Company()
    {
        AllTheStores = new List<Store>();
    }
}

修改

如果多个public int CompanyId;可以拥有相同的Company,则Store属性才有意义。否则,您可以通过公司访问商店:

Company c = new Company();

Store s = c.AllTheStores.Find(x=>x.Name == "MyStore");

// or 
List<Store> largeStores = c.AllTheStores.Where(x=>x.NoOfEmployees > 200).ToList();

答案 1 :(得分:1)

正如你所说

  

一家公司有很多商店。

在这句话中你的回答是。

使用Company课程如下,而不是将companyID放入Store课程

public class Company 
{
    public int Id;
    public string Name;
    public string Email;
    public Guid GUID;

    // put a List of all Stores
    public List<Store> Stores;
}

答案 2 :(得分:1)

所以回答这是如何运作的问题。

考虑到您拥有想要获得所有商店的公司的ID,您可以这样做:

using (var dbcontext = new DbContext())
{
    var stores = await dbcontext.Stores.Where(x => x.CompanyId == companyId).ToListAsync();
}

您不需要导航属性。我从未拥有过它们,它们只会给我带来问题,我并不是说它们会给您带来问题。它们只是一个方便的东西(从它看起来似乎),在我看来,它掩盖了底层的SQL表示和EF可能正在运行的查询。现在,几乎没有你真正关心EF生成的查询,当你到达它们时,你可能会发现导航属性阻碍了你。

如果您想再次保存记录,只需为每个Store分配一个真实的Company.Id,即可履行外键义务。

您可以进行的一项更改(如果这适用于您的情况)是您可以删除int Id并使用CompanyId作为主键和外键

public class Store 
{

    // public int Id; just remove this

    public int CompanyId; // make this a foreign key using fluent or attributes.

    public string Name;

    public int NoOfEmployees;

    public Guid GUID;
}

这确保您保留1对多人的关系,如果那些很多只应存在于一家公司。如果没有,那么不要担心上述情况。

答案 3 :(得分:0)

您应该使用公司类对象本身而不是仅在Store类中使用CompanyId。

public class Company 
{
    public int Id;

    public string Name;

    public string Email;

    public Guid GUID;

    public List<Store> Stores;
}

public class Store 
{

    public int Id;

    public Company Company; // Can get CompanyId using StoreObj.Company.Id

    public string Name;

    public int NoOfEmployees;

    public Guid GUID;
}