2

私はEntityFrameworkv4.3.1を使用しており、DbContextから継承し、OnModelCreating()をオーバーライドすることにより、コードを介してモデルを構築しています。CompaniesというテーブルとMessagesというテーブルがあります。メッセージテーブルには、null許容の外部キーMessages.CompanyIdがあります。これを設定すると、特定のメッセージが特定の会社に関連付けられます。このフィールドがnullの場合、メッセージはすべての会社に関連付けられます。

私の問題は、OnModelCreating()メソッドでこの動作を表現する方法がわからないことです。私が行った場合:

modelBuilder.Entity<Message>().HasRequired(o => o.Company).WithMany(o => o.Messages).Map(o => o.MapKey("CompanyId"));

TestCompany.Messagesのような呼び出しを実行できるように、Companyのナビゲーションプロパティを正常に取得し、特定の会社に関連付けられたメッセージのリストを取得します。ただし、すべてのnullメッセージを返す必要もあります。

これはどのように達成できますか?

4

1 に答える 1

6

どの会社にも関連付けられていないメッセージをクエリする場合CompanyIdは、Messageエンティティクラスのスカラープロパティをモデル化する必要があります。

public class Message
{
    //other porperties

    public int? CompanyId { get; set; }
}

そして、のHasOptional代わりにを使用して関係を構成しますHasRequired

modelBuilder.Entity<Message>()
    .HasOptional(o => o.Company).WithMany(o => o.Messages)
    .HasForeignKey(m => m.CompanyId);

次に、を使用してクエリを実行できます

var messages = db.Messages.Where(m => m.CompanyId == null);
于 2012-04-11T12:04:32.373 に答える