您如何处理SubSonic与迁移的“关系”?

时间:2009-09-24 00:27:08

标签: subsonic migration simplerepository

根据这篇文章: 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?如果是这样,这种方法如何适用于多对多关系?

1 个答案:

答案 0 :(得分:1)

这是可能的 - 你只需手动完成即可。向Disaster添加一个名为“Addresses”的属性,并将其设为IList&lt;&gt; (或者如果你想让它为Lazy Load,你可以使它成为IQueryable)。当您检索灾难时,请务必检索您的地址。

这是“手动” - 但这就是主意。我正在努力增强这一点,我希望能够推出更高版本。

在你问我为什么不首先这样做之前:)这是因为我不知道我是否应该使用基于父/子关系的多对多或一对多。在你的例子中,我猜它可能是1对多,但考虑到我对地址和灾难的了解(特别是在佛罗里达州)它可能应该是很多对很多人。

底线 - SubSonic将如何知道这一点?我们可以反省两个对象的“双向性”,这意味着如果地址有很多灾难而不是很多(很明显) - 但是如果你喜欢DDD,那就不好编码了。

我倾向于使用某种类型的覆盖来强制解决问题。您对这方面的想法是受欢迎的:)