根据这篇文章: 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
?如果是这样,这种方法如何适用于多对多关系?
答案 0 :(得分:1)
这是可能的 - 你只需手动完成即可。向Disaster添加一个名为“Addresses”的属性,并将其设为IList&lt;&gt; (或者如果你想让它为Lazy Load,你可以使它成为IQueryable)。当您检索灾难时,请务必检索您的地址。
这是“手动” - 但这就是主意。我正在努力增强这一点,我希望能够推出更高版本。
在你问我为什么不首先这样做之前:)这是因为我不知道我是否应该使用基于父/子关系的多对多或一对多。在你的例子中,我猜它可能是1对多,但考虑到我对地址和灾难的了解(特别是在佛罗里达州)它可能应该是很多对很多人。
底线 - SubSonic将如何知道这一点?我们可以反省两个对象的“双向性”,这意味着如果地址有很多灾难而不是很多(很明显) - 但是如果你喜欢DDD,那就不好编码了。
我倾向于使用某种类型的覆盖来强制解决问题。您对这方面的想法是受欢迎的:)