我应该有一个还是两个DbSet?

时间:2014-07-18 03:47:58

标签: entity-framework list dbcontext dbset

我正在编写一个MVC5 C#Internet应用程序,我有一个名为MapCompany的类和一个被归类为MapLocation的类。

每个MapCompany都有一个MapCompany's列表。我的问题是,对于上下文类,我应该只有DbSet<MapCompany>,并将MapLocations添加到特定的MapCompany,还是应该同时拥有DbSet<MapCompany>和{{} {1}}?

修改

以下是有关该应用程序的一些信息:

  1. 每个MapCompany都可以有多个MapLocations~5-25
  2. 我希望能够通过其ID
  3. 访问任何MapLocation

    因为我希望能够通过其id访问每个MapLocation,如果只有DbSet<MapLocation>,会有很多数据库搜索,因为我必须搜索每个MapCompany以找到MapLocation它的身份?

    由于数据库搜索的增加,拥有每个DbSet会更经济吗?另外,这会使数据库变得更大吗?

    无论哪种方式,每个MapCompany都需要有很多MapLocations,我需要能够有效地通过自己的id检索任何对象。

    根据以上信息,我感兴趣的是我是否应该为每个对象编写DbSet。

3 个答案:

答案 0 :(得分:0)

我建议您使用存储库模式作为数据层。

http://msdn.microsoft.com/en-us/library/ff649690.aspx

如果您不希望每个MapCompany都有大量的Map Location记录,我也会在您的两个模型之间建立关系。否则,返回id列表而不是模型可能更为理想。

如果不了解您的申请,很难说。

答案 1 :(得分:0)

根据建议,您需要使用Repository Pattern ...尝试在Repository Pattern上检查此示例:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

答案 2 :(得分:0)

如果这些实体之间存在外键关系。

public class MapCompany
{
    public int Id { get; set; }
    public ICollection<MapLocation> MapLocations { get; set; } // foreign key
}
public class MapLocation
{
    public int Id { get; set; }
    public int MapCompanyId { get; set; } // foreign key
    public MapCompany MapCompany { get; set; } // foreign key
}

只有DbSet<MyCompany>可以,由于外键关系,仍然会在数据库上生成MapLocation

如果您还希望DbSet<MapLocation>,也可以。

如果您没有DbSet<MapLocation>,但想直接访问它而不首先检索MyCompany实体,则可以执行此操作。

using (var context = new MyDbContext())
{
    var mapLocation = context.Set<MapLocation>().Find(1);
}