0

RDBMSクラスの宿題を書いていますが、サイバースポーツ選手権である非常に単純なドメインでCRUD操作を実行する必要があります。
学生はADO.NETを使用する必要があります。私の質問は、双方向の関係をどのように解決できるかです。たとえば、1:m(すべてのチャンピオンシップには多くの試合がありますが、すべての試合は1つの正確なチャンピオンシップにのみ属します)?そのためのテクニックが必要だと私には思えます。
そして、私にとって最も興味深い部分は、EFやNHibernateのようなORMがこの状況をどのように解決するかということです。

4

4 に答える 4

1

独自のデータアクセス層の構築については、DavyBrionsブログをご覧ください。彼はそれらすべての種類の課題について話します。

于 2009-12-16T20:02:06.193 に答える
1

NHibernateでは、それは非常に単純で簡単です。ドメインクラスがどのように見えるかを示し、その後に流暢なマッピングが続きます。これは、NHibernateを使用してスキーマを生成することを前提としています。レガシーデータベースをマッピングする場合は、使用する列名とテーブル名を簡単に設定できます。

public class Championship {
  public virtual int Id { get; set; }
  public virtual IList<Match> Matches { get; set; }
}


public class Match {
  public virtual int Id { get; set; }
  public virtual Championship Champioship { get; set; }
}


public class ChampionshipMap : ClassMap<Championship> {
  public ChampionshipMap() {
    Id(x => x.Id);
    HasMany(x => x.Matches);
  }
}


public class MatchMap : ClassMap<Match> {
  public MatchMap () {
    Id(x => x.Id);
    References(x => x.Championship);
  }
}
于 2009-12-16T20:05:37.070 に答える
0

Hibernateの多対多のようなものの場合、関係を定義します。ここに例があります(参照はここにあります:

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <set name="addresses" table="PersonAddress">
        <key column="personId"/>
        <many-to-many column="addressId"
            class="Address"/>
    </set>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <set name="people" inverse="true" table="PersonAddress">
        <key column="addressId"/>
        <many-to-many column="personId"
            class="Person"/>
    </set>
</class>

データベース側から見ると、多対多の関係では、通常、リンクテーブルがあります。

だから私たちは持っているでしょう:

PERSON
ADDRESS
PERSON_ADDRESS

PERSON_ADDRESSテーブルには、2つのエンティティをリンクするためのperson_idとaddress_idが含まれます。したがって、1人の人が多くの住所を持つ可能性があり、特定の住所が複数の人または会社に属する可能性があります。

1:mの関係の場合、これで十分です。

PERSON
ADDRESS

addressには、person_id列がありますが、特定のperson_idに対して多くのアドレスレコードが存在する可能性があり、1:mの機能が提供されます。

于 2009-12-16T20:04:36.213 に答える
0

For example in DataObjects.Net you can write following to get automatically associated Championship.Matches entity set and Match.Championship persistent field.

[HierarchyRoot]
public class Championship : Entity
{
  [Field, Key]
  public int Id { get; set; }

  [Field, Association(PairTo="Championship")]
  public EntitySet<Match> Matches { get; private set; }
}

[HierarchyRoot]
public class Match : Entity
{
  [Field, Key]
  public int Id { get; set; }

  [Field]
  public Championship Championship { get; set; }
}
于 2009-12-17T04:59:19.707 に答える