この例では車の所有者をに変更しています。
public class Car
{
...
public virtual Person Owner { get; protected set; }
public void ChangeOwner(Person newOwner)
{
// perform validation and then
Owner = newOwner;
// maybe perform some further domain-specific logic
}
}
注:Car
にPerson
に戻って参照を追加することに対する重大な短所が存在しない場合、私のようなものでいいと思う保護セッター外部の消費者がChangeOwner
メソッドを呼び出して強制することです。 EFでは、POCOクラスの自動生成されたプロキシのおかげで、適切に設定できるようになります(使用すると仮定します)。
EDIT: Person
に後方参照を追加する可能性がない場合でも、ドメインロジックの観点から見ても同じ目標があります。あなたは車の所有者を変更したいだけです。
public void ChangeCarOwner(Person originalOwner, Person newOwner, int carId)
{
Car car = originalOwner.RemoveCarOwnership(carId);
newOwner.AddCarOwnership(car);
}
public class Person
{
...
public Car RemoveCarOwnership(int carId)
{
Car car = this.Cars.Single(c => c.Id == carId);
this.Cars.Remove(car);
return car;
}
}
これは単に概念的なコードの一部とある:私はおそらく(かかわらず、それがうまく設計されたシステムに置かれるべき場所の)実体の外のどこかに置い方法で行くと思いますので、このような動作は、2 entitesが関与しますそれは最も確かに書くことができます(古い所有者が実際に車を所有していることを確認してください)が、私はちょうど私がそれにどのようにアプローチするかのアイデアを提示したかったのです。私もAddCarOwnership
の実装をommited私はそれがかなり緊迫していると思う原因。私は、所有権の追加と削除が、特定の人の「内部」のさらなる論理を引き起こす原因となるこれらの方法を導入しました。非常に多くの
あなたはEF(例えば、コードまず、最初のスキーマなど)...あなたはPOCOを使用している、プロキシなどなどを使用してどのように依存テンプレートで生成されたエンティティまたはプロキシを使用している場合は、メモリ内の関係を変更して保存するだけで済みます。 –
@JamesGaunt:ありがとうジェームズ、私は私の質問を編集しました。 – madatanic
コレクションから削除して別のコレクションに追加しようとしましたか? – usr