Iには、Contact
とContactField
の2つのクラスがあります。 ContactField
がContact
に追加された場合、SortOrder
をContactField
に自動的に割り当てることを希望します。 DbSetを継承してAdd
メソッドをカスタマイズする必要がありますか?それを達成する方法?DbSet <T>の追加アクションの観察方法?
public class Foo {
private MyDbContext _db = new MyDbContext();
public void HelloWorld() {
Contact contact = ....; //< A contact from database.
ContactField field = ....; ///< A new field
.... ///< assign other properties into this `field`
field.FieldType = FieldType.Phone;
// How to automatically update `SortOrder`
// when adding field into `ContactFields`
contact.ContactFields.Add(field);
_db.SaveChanges();
}
}
public class Contact {
public long ContactID { get; set; }
public string DisplayName { get; set; }
public string DisplayCompany { get; set; }
public DateTime CreatedTime { get; set; }
public DateTime ModifiedTime { get; set; }
// Original codes
//public virtual ICollection<ContactField> ContactFields { get; set; }
public virtual MyList<ContactField> ContactFields { get; set; }
}
public class ContactField {
public long ContactFieldID { get; set; }
public int SortOrder { get; set; }
public int FieldType { get; set; }
public string Value { get; set; }
public string Label { get; set; }
[Column("ContactID")]
public int ContactID { get; set; }
public virtual Contact Contact { get; set; }
}
編集: 私は私が必要なものを見つけるには、ICollection<ContactField> ContactFields
の変化を監視することです。 List<T>
はICollection<T>
の実装です。そこで、私はカスタムMyList
を作成し、MyList
コンテナの変更を通知するように頼みます。私はそれが動作するかどうかをテストします。
public class MyList<TEntity> : List<TEntity> {
public delegate OnAddHandler(object sender, TEntity entry);
public event OnAddHandler OnAddEvent;
public new void Add(TEntity entity) {
OnAddEvent(this, entity);
base.Add(entity);
}
}
'Contact'が' _db'に保存されていない場合、 'ICollection ContactFields'の' Add'アクションを観察できますか? –
AechoLiu
このアプローチについてありがとうございます。私は私の質問を編集しました。 – AechoLiu
'.Local'にアクセスすると、テーブル全体がデータベースからメモリにロードされることに注意してください。中規模のテーブルであっても、パフォーマンスに大きな影響を与えます。 – Breeze