2012-04-11 9 views
1

私はEntityFramework v4.3.1を使用しており、DbContextを継承してOnModelCreating()をオーバーライドしてコードを使用してモデルを構築しています。私はという会社のテーブルというテーブルというテーブルを持っています。 メッセージテーブルには、NULL可能な外部キーMessages.CompanyIdがあります。これを設定すると、特定のメッセージが特定の会社に関連付けられます。このフィールドがヌルの場合、メッセージはすべての企業に関連付けられます。Null可能な外部キーのナビゲーションプロパティの作成

私の問題は、OnModelCreating()メソッドでこの動作をどのように表現するのか分かりません。私が行う場合:

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

私は正常に私がTestCompany.Messagesなどの呼び出しを行うことができますし、私は特定の会社に関連するメッセージの一覧を取得するような会社にナビゲーションプロパティを取得します。しかし、すべてのnullメッセージを返す必要もあります。

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

答えて

5

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

public class Message 
{ 
    //other porperties 

    public int? CompanyId { get; set; } 
} 

、代わりにHasRequiredHasOptionalを使用して関係を設定します。私は私が間違って照会してモデルの作成をミックスしようとしていたと思います -

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

次に、あなたは

var messages = db.Messages.Where(m => m.CompanyId == null); 
+0

感謝を使用して照会することができます。私は今、これらの懸念を分けています。 – DotNetDeveloper

+0

これは流動的なAPIを使用してのみ可能ですか? 'HasOptional'機能をデータアノテーションから使用できますか? –

関連する問題