2012-03-10 17 views
0

私は、データベースのTenantUserテーブルを介してユーザーにリンクするテナントを持っています。 この関係はmany => manyですが、実際はマッピングを一方向に公開したいだけです。流暢なコードファーストEF 4.3

テナントは、Userクラスは何のプロパティマッピングをバック持っていない

virtual ICollection<User> Users { get; set; } 

性質を有しています。

プロパティまたはFluent APIを使用してTenantのUsersプロパティをマップし、TenantUserテーブルを介して特定のテナントのユーザーを収集することは可能ですか?

どのような種類のマッピングを指定するにも、UserクラスにはTenantコレクションが必要ですか?

私はまた、(オプションで)仲介テーブルを管理するためのコンテキストで

DbSet<TenantUser> 

を持っていますが、便宜のために、私はテナントクラスのプロパティにアクセスします。

ありがとうございました。

答えて

4

は1つだけのコレクションは、モデルクラスで公開された場合にも、流暢APIで多対多マッピングを定義することができます

modelBuilder.Entity<Tenant>() 
    .HasMany(t => t.Users) 
    .WithMany() 
    .Map(x => 
    { 
     x.MapLeftKey("TenantId"); 
     x.MapRightKey("UserId"); 
     x.ToTable("TenantUser"); 
    }); 

あなたはデータ注釈を含むこの関係を定義することはできません。

Entity Frameworkの多対多の関係にTenantUserエンティティがないことに注意してください。したがって、リンクテーブルを管理するためにコンテキスト内にDbSet<TenantUser>を作成することはできません。 Tenant.Usersコレクションに要素を追加または削除して関係を追加または削除すると、EFはこのテーブルを内部的に管理します。

+0

申し訳ありませんが、私は数日間はテストできませんでした。大変お世話になりました。 WithMany()を引数なしで指定できるということは私には起こりませんでした。この流暢なAPIのどこかに良い文書がありますか? – Jim

+0

@Jim:Intellisense :)正直なところ、私は実験的に、グーグルで、Intellisenseでどのようなメソッドが利用できるかなどを調べるだけで、そのことを理解しました。公式の文書は、私が思うに、これは:http://msdn.microsoft.com/en-us/library/hh295844%28v=vs.103%29.aspxしかし、私はそれを読んだことはありません。 – Slauma

関連する問題