2つのオブジェクト間に多対多の関係を定義しました。各オブジェクトは、コードで関係をトラバースするために、同じNavigationプロパティを公開します。設定は次のとおりです。EF 6多対多ナビゲーションプロパティnull
public class Message : Entity<int>
{
public int UserId { get; set; }
public User User { get; set; }
public Guid Reference { get; set; } = Guid.NewGuid();
public virtual ICollection<MessageGroup> MessageGroups { get; set; } = new HashSet<MessageGroup>();
}
}
public class Group : Entity<int>
{
public int UserId { get; set; }
public User User { get; set; }
public Guid Reference { get; set; } = Guid.NewGuid();
public virtual ICollection<MessageGroup> MessageGroups { get; set; } = new HashSet<MessageGroup>();
}
public class MessageGroup
{
public int MessageId { get; set; }
public Message Message { get; set; }
public int GroupId { get; set; }
public Group Group { get; set; }
}
これは私の状況です。私は複数のグループを(レコードがMessageGroup
表に正しい)を有しているメッセージをロードしようとすると
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MessageGroup>()
.HasKey(bc => new { bc.GroupId, bc.MessageId });
modelBuilder.Entity<MessageGroup>()
.HasRequired(bc => bc.Group)
.WithMany(b => b.MessageGroups)
.HasForeignKey(bc => bc.GroupId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<MessageGroup>()
.HasRequired(bc => bc.Message)
.WithMany(c => c.MessageGroups)
.HasForeignKey(bc => bc.MessageId)
.WillCascadeOnDelete(false);
}
しかし、唯一Messages
が示されています。情報については、Messages
DbSetでロードしています。 Groups
DbSetを使用してグループをロードすると、逆のことが起こり、Groups
のみが表示されます。
メッセージから読み込みDbSet;グループDbSetからロード
。
私はMessageGroup
DbSetを使用して、それらを含めることで、両方を取得することができます。
var messageGroups = context.MessageGroups.Where(x => x.MessageId == id).Include(x => x.Group).Include(x => x.Message).ToList();
しかし、メッセージやグループを読み込んで利用できるようにしたいと考えています。
私のコンテキストは別のレイヤーにラップされていますが、各タイプごとにいくつかのメソッドが公開されていますが、最終的には呼び出しています。
public T Get(U id)
{
return _dbSet.Find(id);
}
[C#エンティティフレームワークの可能性の重複:どのようにすることができます私はモデルオブジェクトに.Findと.Includeを組み合わせますか?](https://stackoverflow.com/questions/7348663/c-sharp-entity-framework-how-can-i-combine-a-find-and-include -on-a-model-obje) – Progman
コレクションナビゲーションプロパティを読み込むときに、逆ナビゲーションプロパティも読み込まれます。他のプロパティを読み込むには、明示的に 'Include'する必要があります。あるいは、コレクションのナビゲーションプロパティが 'virtual'(したがって遅延ロードされている)なので、あなたは' MessageGroup'ナビゲーションプロパティも 'virtual'にする必要があります。 –
@Progman、はい私はあなたがそれらを含めることができることを知っていますが、私の具体的な質問はそうすることなくそれらを利用可能にする方法でした。ありがとう – ChrisBint