你如何处理亚音速的“关系”与移民?
-
16-09-2019 - |
题
根据这篇文章: 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
添加一列?如果是的话,请问这种方法工作的许多一对多的关系?
解决方案
这是可能的 - 你只是手工做它是所有。一个属性添加到灾难称为“地址”,并使其成为一个IList <>(或者你可以把它IQueryable的,如果你想让它延迟加载)。当您找回您的灾难,只是一定要找回您的地址。
这是一种“手动” - 但是这想法。我正在改进这一点,我希望在以后的版本推。
和你问为什么之前我没有做它摆在首位:)那是因为我不知道我是否应该使用多对多或一对多基于父/子关系。在你的榜样,我猜它可能是1对多,但给我知道的地址和灾害(尤其是在美国佛罗里达州),它也许应该是多对多。
底线 - 怎么会亚音速知道这一点?我们可以反思的对象都为“双向性”,这意味着如果地址有许多灾难比它的多对多(这是显而易见的) - 但后来这不是幸福的编码,如果你喜欢DDD
我倾向于与某些类型覆盖的,这将迫使问题这一规则。您对此怎么看,欢迎:)