如何更好地存储有关数据库中类别的信息

时间:2014-05-28 13:21:26

标签: asp.net-mvc entity-framework database-design ef-code-first

在Entity Framework Code First中设计数据库哪种方法更好。将实体中的类别添加为字符串或对象。进一步发展的实际后果是什么?

我想知道在我使用可编辑的SelectLists决定解决方案A的情况下会出现问题。

解决方案A:

class Advertisement : BaseObject
{
    int AdvertisementId { get; set; }
    string User { gest; set; }
    string Title { get; set; }
    string Content { get; set; }
    decimal Price { get; set; }
    public string City { get; set; }
    public string Region { get; set; }
    bool Featured { get; set; }
    public string Category { get; set; }
    IEnumerable<File> Photo { get; set; }

    [DataType(DataType=email)]
    string Email { get; set; }
    string Phone { get; set; } 
    string Address { get; set; }
}

解决方案B:

class Advertisement : BaseObject
{
    int AdvertisementId { get; set; }
    string User { gest; set; }
    string Title { get; set; }
    string Content { get; set; }
    decimal Price { get; set; }
    public virtual City City { get; set; }
    public virtual Region Region { get; set; }
    bool Featured { get; set; }
    public virtual Category Category { get; set; }
    IEnumerable<File> Photo { get; set; }

    [DataType(DataType=email)]
    string Email { get; set; }
    string Phone { get; set; } 
    string Address { get; set; }
}

1 个答案:

答案 0 :(得分:1)

解决方案A在两个用例中有意义:

  • 可用的类别是硬编码的,但在这种情况下枚举会 是一个更好的选择
  • 类别实体存在于不同的上下文中,您不会 通过不引用另一个实体来解耦两个上下文。在 但是这种情况你应该使用的唯一标识符 类别。

Soultion B应该用于任何其他情况,因为它会

  • 通过代理对象更轻松地访问类别实体 由实体框架生成
  • 可以使用该类别的任何其他属性 而不是它的名字,可能在以后相关的必要 因此这种方法提供了更大的灵活性
  • 在生成的数据库中,它只会使用标识符 用于连接广告和类别表的类别