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.

わかりました。データベースを、ビジネスロジックを含まないデータの永続的なリポジトリとして扱うことができます。言い換えれば、栄光のテキストファイルです。

方法がわからないのは、2つのオブジェクトを関連付けることです。たとえば、次の2つのクラスを取り上げます。

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、すべての列を含むテーブルが生成されますが、期待どおりに外部キー列は生成されません。

これら2つをどのように関連付けて、電話をかけたときにDisaster.Addresses影響を受けるすべてのリストを取得できるようにしAddressesますか?これは可能ですか、それとも代わりにActiveRecordを使用して、最初にデータベーステーブルを作成する必要がありますか?または、災害のIDの列をに追加する必要がありますAddressか?もしそうなら、この方法は多対多の関係に対してどのように機能しますか?

4

1 に答える 1

1

それは可能です - あなたはそれを手で行うだけです。"Addresses" というプロパティを Disaster に追加し、それを IList<> にします (または、遅延ロードする場合は IQueryable にできます)。災害を取得するときは、必ずアドレスを取得してください。

それは一種の「手動」ですが、それがアイデアです。これの機能強化に取り組んでおり、今後のリリースでプッシュしたいと考えています。

そもそもなぜ私がそれをしなかったのかと尋ねる前に:)それは、親子関係に基づいて、多対多または1対多のどちらを使用する必要があるかがわからないためです。あなたの例では、おそらく1対多だと思いますが、住所と災害(特にフロリダで)について私が知っていることを考えると、おそらく多対多になるはずです。

結論 - SubSonic はどのようにしてこれを知るのでしょうか? 「双方向性」について両方のオブジェクトをイントロスペクトできます。つまり、多対多よりも多くの災害が Address にある場合 (これは明らかです) - しかし、DDD が好きな場合は、それは幸せなコーディングではありません。

私は、問題を強制する何らかのタイプのオーバーライドを使用して、そのルールに傾いています。これに関するあなたの考えは大歓迎です:)

于 2009-09-24T01:37:28.930 に答える