参照オブジェクトとして使用するエンティティの読み取り専用 (または不変) バージョンを作成する方法を探しています。例えば
class Order
{
public int OrderId {get; private set;}
public virtual Product ProductOrdered{get;set;}
public int ProductId {get;set;}
public int Quantity{get;set;}
}
class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string Category { get; set; }
}
上記の例では、製品は参照データとして使用されることになっています。すなわち、製品は、注文の参照として製品を使用するコードによって変更されるべきではありません。
今、それを強制する1つの方法は、すべてのセッターをプライベートにすることであり、誰も製品を変更できないことに気付きました...
class ProductReadOnly
{
public int ProductId { get; private set; }
public string Name { get; private set; }
public string Category { get; private set; }
}
しかし、アプリのどこかで、管理者が製品を作成/変更できるようにしたいと考えています。したがって、クラス Product を使用できます (パブリック セッターを使用)
質問は次のとおりです(Table属性を使用してProductとProductReadOnlyを製品テーブルにマップできると仮定します)
- Order クラスのナビゲーション プロパティとして ProductReadOnly を使用できますか?
- Product と ProductReadOnly (同じ製品) を同じデータ コンテキストで読み込むことはできますか?
- それを行う簡単な方法はありますか (デタッチされたオブジェクト?)
- このアプローチに問題はありますか?