1

根据这篇文章: http ://subsonicproject.com/docs/3.0_Migrations

Bottom line: if you're a developer that is concerned about database design,
migrations might not be for you.

好的,没关系,我可以将数据库简单地视为不包含任何业务逻辑的持久数据存储库。换句话说,一个美化的文本文件。

我不知道该怎么做是将两个对象关联在一起。以这两个类为例:

public class Disaster
{
    public int DisasterId { get; set; }
    public string Name { get; set; }
    public DateTime? Date { get; set; }
    public IList<Address> Addresses { get; set; }
}

public class Address
{
    public int AddressId { get; set; }
    public string WholeAddressHereForSakeOfBrevity { get; set; }
}

Disaster包含遭受灾难IList的多个。Addresses当我使用SimpleRepository将这些添加到数据库时SimpleRepositoryOptions.RunMigrations,它会生成包含所有列的表,但没有预期的外键列。

我如何将这两者联系起来,以便在我打电话时Disaster.Addresses得到一份所有受影响者的名单Addresses?这是可能的还是我必须使用 ActiveRecord 并首先创建数据库表?还是我必须在灾难 ID 的列中添加Address?如果是这样,这种方法如何适用于多对多关系?

4

1 回答 1

1

这是可能的——你只需要手工就可以了。向灾难添加一个名为“Addresses”的属性,并将其设为 IList<>(或者,如果您希望将其设为延迟加载,则可以将其设为 IQueryable)。当您检索灾难时,请务必检索您的地址。

这有点像“手动”——但这就是想法。我正在对此进行改进,希望在以后的版本中推出。

在你问我为什么不首先这样做之前:) 这是因为我不知道我应该根据父/子关系使用多对多还是一对多。在您的示例中,我猜它可能是一对多,但鉴于我对地址和灾难(尤其是在佛罗里达州)的了解,它可能应该是多对多。

底线 - SubSonic 怎么会知道这一点?我们可以自省这两个对象的“双向性”,这意味着如果 Address 有很多灾难而不是多对多(这很明显)——但是如果你喜欢 DDD,那编码就不愉快了。

我倾向于使用某种类型的覆盖来解决该问题的规则。欢迎您对此提出想法:)

于 2009-09-24T01:37:28.930 回答