私はという自己参照関係のクラスを持っています。です。次のようにクラスがある:私のコンテキストクラスで制約付き自己参照EF多対多
public class TableActivity
{
public TableActivity()
{
}
public int TableActivityID {get;set;}
public string Table {get;set;}
public Activity Activity {get;set;}
public virtual ObservableCollection<TableActivity> RelatedActivities {get;set;}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TableActivity>()
.HasMany<TableActivity>(t => t.TableActivityID)
.WithMany()
.Map(m =>
{
m.ToTable("RelatedActivities");
m.MapLeftKey("TableActivityID");
m.MapRightKey("RelatedTableActivityID");
});
}
私は2つのspesific制約を追加したい:
- TableActivityオブジェクト自体はに記載されていることはできませんRelatedActivities
- たとえば、2つのTableActivityオブジェクトo1およびo2がある場合、o1.relatedActivities.contain s(o2)の場合、o2.relatedActivitiesはo1をリストすることができません。
どのようにこの2つの制約を達成するには?
私はのObservableCollectionを継承するヘルパークラスを作成し、私は追加Methodeの管理:私はをやっていること
。
public class RelatedTableActivityCollection :ObservableCollection<TableActivity>
{
private TableActivity m_Owner;
public RelatedTableActivityCollection(TableActivity owner)
{
this.m_Owner = owner;
}
public new void Add(TableActivity item)
{
if (m_Owner.Equals(item)) {
return;
} else {
base.Add(item);
}
}
}
この解決方法の問題は、アプリケーションで問題なく動作しますが、データベース側では何も行われないことです。この変更をデータベースで考慮する方法はありますか?
あなたの時間とur guidlinesありがとうございます。 –