私は現在プロジェクトに取り組んでおり、ORMとしてHabaneroを使用することを選択しました。SmoothHabaneroを使用してビジネスオブジェクトを設定しています。有効にするために少なくとも1つのオブジェクトインスタンスが必要な別のクラスとの関係があります。どうすればいいですか?
1 に答える
OK、これは少し詳細になる可能性があるので、いくつかの基本から始めましょう。
Smooth は、habanero ORM の Code First コミュニティ プロジェクトです。Smooth は、Convention over Configuration アプローチに基づいています。
Smooth が理解できる何らかの規則に従っていれば、Habanero ドメイン オブジェクトをデータベースに正しくマッピングするための外部キー プロパティは必要ありません。
通常
public class Customer : BusinessObject
{
}
public class SalesOrder : BusinessObject
{
/// <summary>
/// The type this SalesOrder is for.
/// </summary>
public virtual Customer Customer
{
get { return Relationships.GetRelatedObject<Customer>("Customer"); }
set { Relationships.SetRelatedObject("Customer", value); }
}
}
このシナリオでは、Sales Order は Customer に対して 1 つの関係を持ちます。Customer は Sales Order で必須です。つまり、Customer が設定されていないと、Sales Order を永続化することはできません。
ドメインレベルでは、これはすべて理にかなっています。ただし、データベース レベルでは、Customer 関係は SalesOrder テーブルの外部キーを使用してマップされます。CustomerID が SalesOrder テーブルの外部キー プロパティであるという規則に従う場合、ドメイン モデルで設定された関係を取得し、データベースに正しくマップするために必要なことはこれだけです。
さて、あなたの質問への答えです。
クラスが上記のように定義されている場合、「[AutoMapCompulsory]」属性を追加するだけで、Smooth がリレーションシップとその外部キーの必要な設定をすべて強制的に行います。
public class Customer : BusinessObject
{
}
public class SalesOrder : BusinessObject
{
/// <summary>
/// The type this SalesOrder is for.
/// </summary>
[AutoMapCompulsory]
public virtual Customer Customer
{
get { return Relationships.GetRelatedObject<Customer>("Customer"); }
set { Relationships.SetRelatedObject("Customer", value); }
}
}
これがブレットに役立つことを願っています