我正在编写一个MVC5 C#Internet应用程序,我有一个名为MapCompany
的类和一个被归类为MapLocation
的类。
每个MapCompany
都有一个MapCompany's
列表。我的问题是,对于上下文类,我应该只有DbSet<MapCompany>
,并将MapLocations
添加到特定的MapCompany
,还是应该同时拥有DbSet<MapCompany>
和{{} {1}}?
修改
以下是有关该应用程序的一些信息:
因为我希望能够通过其id访问每个MapLocation,如果只有DbSet<MapLocation>
,会有很多数据库搜索,因为我必须搜索每个MapCompany以找到MapLocation它的身份?
由于数据库搜索的增加,拥有每个DbSet会更经济吗?另外,这会使数据库变得更大吗?
无论哪种方式,每个MapCompany都需要有很多MapLocations,我需要能够有效地通过自己的id检索任何对象。
根据以上信息,我感兴趣的是我是否应该为每个对象编写DbSet。
答案 0 :(得分:0)
我建议您使用存储库模式作为数据层。
http://msdn.microsoft.com/en-us/library/ff649690.aspx
如果您不希望每个MapCompany都有大量的Map Location记录,我也会在您的两个模型之间建立关系。否则,返回id列表而不是模型可能更为理想。
如果不了解您的申请,很难说。
答案 1 :(得分:0)
根据建议,您需要使用Repository Pattern ...尝试在Repository Pattern上检查此示例:
答案 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);
}