2012-11-29 20 views
7

私はEF5コードファーストを使って私のモデルの一部を定義しています。あなたがチームと ユーザー間の多対多の関係がある見ることができるようにブリーズの多対多関係

public class Team 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Team_Id { get; set; } 
     [MaxLength(150)] 
     public string TeamName { get; set; } 

     public virtual ICollection<User> Users { get; set; } 
     [public virtual ICollection<Role> Roles { get; set; } // 1 

     [Timestamp] 
     public byte[] TimeStamp { get; set; } 
    } 

public class User 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int User_Id { get; set; } 
     [MaxLength(150)] 
     public string LoginName { get; set; } 
     [MaxLength(150)] 
     public string Nachname { get; set; } 
     [MaxLength(150)]   
     public string Vorname { get; set; } 

     public virtual ICollection<Team> Teams { get; set; } 
     public virtual ICollection<Role> Roles { get; set; } // 2 

     [Timestamp] 
     public byte[] TimeStamp { get; set; } 
    } 

public class Role 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Role_Id { get; set; } 
     [MaxLength(50)] 
     public string RoleName { get; set; } 

     [Timestamp] 
     public byte[] TimeStamp { get; set; } 
    } 

:私は、多対多の関係でこれらの 3つのサンプルクラスを持っています。私はこれを数時間働かせようとしています。私はいつもJS 例外をVS 2012の "悪いナビのプロパティ"で例外を取得します。 で最初にそれは ユーザー/チームクラスのICollectionsチーム/ユーザーだと思った。問題は、2つのコール 1)と2)のように思われる。私はどちらか片方を取り除きます。名前を1つに変更し、両方のフィールドをアクティブに維持する は依然としてエラーをスローします。おそらく誰でも 何が起こっているアイデアを持っています。

感謝

この質問は、当社のIdeaBladeフォーラムでSirSmackalotにより投稿されました。私はBreeze Stack Overflowコミュニティに役立つと思うので、ここで質問と回答を再投稿しています。

答えて

14

Breezeは、マッピングテーブルが非表示の多対多リレーションシップをまだサポートしていません。問題は、Breezeが関係を追跡するための「外部キー」の概念に依存していることです。これは、Entity Frameworkでペイロードなしで定義された多対多の関係では使用できません。

多対多リレーションシップをリンクエンティティと2対1リレーションシップに変更する作業は何ですか。基本的には、マッピングテーブルを別のエンティティタイプとして公開するだけです。例えば: - TeamUser(1対多)

ユーザー -

チームTeamUser(1対多)

我々はサポートする予定んEntity Frameworkの公式の多対多リレーションシップを確立する必要がありますが、優先順位を付ける必要があります。 Webサイト(https://breezejs.uservoice.com/forums/173093-breeze-feature-suggestions/filters/top)のフィードバックメカニズムを使用して、この機能要求を追加/投票してください。これは、次に注目すべき機能を決定するのに役立ちます。

+7

多対多の実装を避けるようにアドバイスします。コンセプトはうまくいきますが、実際にはほとんど常に崩れています。私の経験では、マッピングテーブルは最終的に列を取得します。たぶんそれは、リンクの日付やuserId、または両者がどのように一緒に来たかを説明する他の事実かもしれません。その「ペイロード」を追加する瞬間に、多対多が崩れ、マッピング/リンクエンティティを明示的にする必要があります。私は、m-to-m ...コードに依存するすべてのコードを追跡するためにスクランブルする必要があります。私はいつも、最初に1対m +マッピングエンティティを作っておきたいと思っています。 – Ward

+0

チームからすべてのユーザーを取得するために、このようなリンクエンティティでbreezeのクエリがどのように見えますか? – daniel

+3

まだ何もこの上に何もない? – Adaptabi