Broker
,Instrument
、BrokerInstrument
という3つのクラスがあります。ISetにアイテムを追加するには<T>?
using Iesi.Collections.Generic;
public class Broker : ActiveDefaultEntity
{
public virtual string Name { get; set; }
public virtual ISet<BrokerInstrument> BrokerInstruments { get; set; }
}
public class Instrument : Entity
{
public virtual string Name { get; set; }
public virtual string Symbol {get; set;}
public virtual ISet<BrokerInstrument> BrokerInstruments { get; set; }
public virtual bool IsActive { get; set; }
}
public class BrokerInstrument : Entity
{
public virtual Broker Broker { get; set; }
public virtual Instrument Instrument { get; set; }
public virtual decimal MinIncrement { get; set; }
}
これらのクラスを使用して3つの新しいオブジェクト(各タイプの1つ)を作成すると、それらをどのように関連付けるのですか?たとえば:
Instrument instrument = new Instrument {
Name = "Test Instrument",
Symbol = "Test",
IsActive = true
};
Broker broker = new Broker {
Name = "My Test Broker",
IsActive = true,
IsDefault = false
};
BrokerInstrument brokerInstrument = new BrokerInstrument {
Broker = broker,
Instrument = instrument,
MinIncrement = 0.01M
};
どうinstrument
は新しいbrokerInstrument
は今それに関連付けられていることを「知っている」のでしょうか?今私がif (instrument.Brokerinstruments == null)
を実行すると、true
が得られます。 BrokerInstrument
宣言のオブジェクトを関連付けてから、戻ってinstrument.BrokerInstruments ISet
に追加する必要がありますか?
私が試してやること:instrument.BrokerInstruments.Add(instrument)
nullなのでエラーになります。混乱している。私は何が欠けていますか?このような関係をモデル化する最良の方法は何ですか?これらのオブジェクトは、Hibernateを使用してデータベースに永続化されます。
しかし、ユニットテストを実行すると有望に見えるNHibernateは 'TestFixture failed:NHibernate.PropertyNotFoundException:クラス 'MooDB.Domain.Instrument''内のプロパティ' BrokerInstruments 'のセッターを見つけることができませんでした。NHibernateで特別な処理をする必要がありますか?今?それはかなり複雑に思えますが、私がしたいのは、ドメインモデルで1対多の関係をモデル化して、NHibernateにdbへの変更を永続させることだけです。 –
ああ、私はNHibernateビットを見逃しました。私はそれに応じて修正します...完了。 –
ほぼ! 'protected set'行にエラーが発生しました:'暗黙的に 'System.Collections.Generic.IEnumerable'型を 'System.Collections'に変換できません。Generic.ISet 'を選択します。明示的な変換があります(キャストがありませんか?) –