2017-11-28 5 views
0

私は2つのモデルを持っています。エンティティフレームワークの複数の親

BdoSubSystem:

public class BdoSubSystem 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

そしてBdoSystem:

public class BdoSystem 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<BdoSubSystem> SubSystems { get; set; } 
} 

私はAzureの上で自動的にテーブルを作成するために、移行を使用。問題は、サブシステムが各システムに固有ではなく、サブシステムが複数の親を持ち、複数のシステムに現れることがあるということです。しかし、このように、各サブシステムは各システムに属します。

複数のシステムでサブシステムを表示するにはどうすればよいですか?

+1

が見える使用することです)これまでどんなXも複数のYにリンクすることができるように、Xは複数のXにリンクすることができます。うまくいけば、someneはewest EFがこれをどのように処理するかについてあなたに記入することができます。 – oerkelens

+0

答えをありがとう。私は、たくさんの関係を持つチュートリアルを探しています。それが私に役立つかどうかチェックします! –

答えて

1

よろしくお願いいたします。解決策は、サブシステムで参照すると、あなたは通常追加テーブルを持つデータベースで解決されて多対多の関係、(例えば人、住所及びPersonAddressを探しているように[JsonIgnore]

public class BdoSubSystem 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    [JsonIgnore] 
    public virtual ICollection<BdoSystem> SubSystems { get; set; } 
} 
0

私がよく分かっているのであれば、SubSystemはシステムを親として持つシステムの単なるキングですか?私の文がtrueの場合

することは、あなたが2つのseperatesオブジェクトを持つようにしたい場合は、あなたは両方のクラス

public class BdoSubSystem 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<BdoSystem> Systems { get; set; } 
} 

public class BdoSystem 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<BdoSubSystem> SubSystems { get; set; } 
} 
ナビゲーションpropertieを追加する必要があります自己参照

public class BdoSystem 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public int? ParentSystemId { get; set; } 
    public virtual BdoSystem ParentSystem { get; set; } 

} 

を使用することができます

+0

私はあなたの最初の答えを得ていませんでした。あなたの最初の例では、システムはもはやサブシステムの集合を持っていないからです。 とにかく、多対多の関係を探していて、それが機能するかどうかを確認します。ありがとう! –

+1

素晴らしいですが、私はいくつかのチュートリアルを数多く確認し、2番目の例とまったく同じでした。マイグレーションは、 "BdoSystemBdoSubSystem"という名前の別のテーブルを作成しました。 しかし、JSONへのシリアライゼーションはもう機能していません。各モデルのループリファレンスのためだと思います。このオブジェクトをシリアル化する安全な方法はありますか? –

+0

最初の解決策はツリーであり、リストではありません。そして、私はあなたの問題の解決策を見つけました。また、Lazyloadingを無効にすることもできます。ナビゲーションプロパティを自動的にロードすることはありません。 – OrcusZ

関連する問題