1

我有以下课程;

public class Hotel
{
   public int HotelId {get; set;}
   public string Name {get; set;}
   public string Address {get; set;}
   public string City{get; set;}
}

public class District
{
   public int DistrictId {get; set;}
   public string Name {get; set;}
}

然后我需要一个可以同时保存 DistrictId 和 HotelId 的类,所以我想创建一个如下所示的类

public class HotelDistrict
{
   public int DistrictId {get; set;}
   public int HotelId {get; set;}
}

这是正确的方法吗?或者他们是更好的选择?

4

5 回答 5

7

这对于数据库表设计来说非常重要。在 OOP 世界中,您通常会添加对类的引用,而不仅仅是对 id 的引用。

像这样的东西

public class HotelDistrict
{
   public Distric District {get; set;}
   public Hotel Hotel {get; set;}
}

没有灵丹妙药,因此这条规则有例外,但通常您希望避免创建对数据库表有太多气味的类。

于 2013-06-30T18:24:34.517 回答
7

酒店和小区都有many to one relationship。所以,酒店应该有映射到其对应的区域 -

public class Hotel
{
   public int HotelId {get; set;}
   public string Name {get; set;}
   public string Address {get; set;}
   public string City{get; set;}
   public int DistrictId{get; set;}
}
于 2013-06-30T18:27:33.980 回答
0

作为此处其他出色答案的替代方案,如果您更喜欢具有松散耦合对象的更明确的域模型,您还可以执行以下操作。(我假设每家酒店一次只能在一个地区。)

class Hotel
    int HotelId
    int DistrictId
    ...

class District
    int DistrictId
    ...

class HotelsInDistrict
    int DistrictId
    List<int> HotelIds

好处:它是松散耦合的,你不需要摆弄像巨大的对象图、懒惰/急切的加载等痛苦的东西。它符合实际业务领域,而不仅仅是数据容器。它是松散耦合的,允许轻松修改。

缺点:它不容易映射到您的数据库表。但是,如果它不仅仅是一组面向数据的“类”,它们只是表的表示,那么没有真正的对象模型可以做到。

也就是说,我真的向所有对对象建模感兴趣的人推荐一本书:

于 2013-06-30T18:41:47.680 回答
0

出于任何原因,如果您真的需要使用原始HotelDistrict方式,您实际上不需要一个新类,您可以只使用 aTuple<Hotel, District>来存储对,并使用这些元组的列表(例如List<Tuple<Hote, District>>)来存储那些列表对。

但正如 Rohit Vats 所说,存在 *-1 关系,因此最好将区域作为一个字段进行引用,因此如果您没有使用原始方法的具体原因,我推荐他的方法。

于 2013-06-30T18:32:13.987 回答
0

您可以简单地将引用存储District在您的HotelList<Hotel>您的District. 通常,除非您正在处理编写数据库模型,否则您不应保留唯一标识符。如果这是一个数据库模型,那么假设您需要支持多个地区的酒店,那么您的解决方案就很好。

于 2013-06-30T18:24:12.737 回答